Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

> I usually use guard clauses to protect against nulls.

An interesting (to me) insight was that in a language with a flexible type system, the types are effectively just a set of assertions at the start and return of every function, that say that the inputs and outputs have certain properties. With a compact syntax and zero runtime overhead, which is nice.

I do think that some strongly typed languages make it too difficult to step outside the type system; in Scala I have to do something like (x.asInstanceOf[{def foo(): String}]).foo() whereas in Python I can just write x.foo(). But once I started seeing the type system not as a fixed piece of the language but as a framework for encoding my own assertions, it became useful enough that I can't stand to live without it.



It's much more than just at the start end return of every function. But OTOH, it's much less than assertions, since they're restricted to a subset that can be proven (usually automatically).

Note the Scala verbosity here is Scala-specific. In HM-style languages, type inference works much better and you don't have to do such things. You might still have to explicitly "lift" a value from one type to another (e.g: Wrap a value in "Just", or use "lift"), but that's a much more minor price to pay.


Lifting in Scala is not at all verbose; I'm talking about casting, calling a method that the type system doesn't know is present.


> I do think that some strongly typed languages make it too difficult to step outside the type system; in Scala I have to do something like (x.asInstanceOf[{def foo(): String}]).foo() whereas in Python I can just write x.foo()

Have to make an explicit cast with a structural type? Surely you can do better, like, say, a trait.

> I'm talking about casting, calling a method that the type system doesn't know is present.

I think a larger example is necessary to see how you ended up in such a situation, but I suppose it's off-topic...


> Have to make an explicit cast with a structural type? Surely you can do better, like, say, a trait.

Usually, yes. But the only way that's as general as the Python line is to use the structural type.




Consider applying for YC's Fall 2026 batch! Applications are open till July 27.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: