4 ms·
Try programming in Haskell. Pretty much all other statically typed programming languages (except ML etc.) get their type systems wrong because all types are rea
by sedachv 16y ago
Try programming in Haskell. Pretty much all other statically typed programming languages (except ML etc.) get their type systems wrong because all types are really (or <x> null). That's useless for doing type checking, which is why there doesn't seem to be much of an advantage to static typing. Type classes and Hindley-Milner inference make things really nice to use. But it's really the lack of null that makes Haskell's type system actually useful for things other than catching trivial type bugs.
- srean 16y agobecause all types are really (or <x> null). Did you miss a word there ? It happens to me all the time.
- regularfry 16y agoI don't think he did... took me a couple of passes, but it parsed in the end.
- jamie_ca 16y agoParse it as lisp. It's haskell-type-system-speak for "If you declare something to be a String, it really means String or null."
- pjscott 16y agoThe Haskell type for that would be "Maybe String". When you get a Maybe value, the compiler gives an error if you don't deal with the possibility that the value might be Nothing.
- pjscott 16y agoHaskell's type system catches a lot of bugs, and there are a lot of things right about it, but in practice, the type system often feels like a pain in the ass. I'm tired of being hit with nigh-incomprehensible type errors. I'm very tired of not being able to do printf debugging without using the IO monad and changing all the type signatures, although judicious use of unsafePerformIO helps. What I really want in a type system is for it to catch bugs, but get out of my way. Haskell is a little too stern for my liking.
- neutronicus 16y agoDebug.trace is the module for you, my friend. Debug.trace a b = a and b gets logged to the console. Or maybe it's backwards. I forget.
- lsb 16y agoIt's the opposite way: Debug.Trace.trace :: String -> a -> a and if you don't like debug.trace, you can make your own, via unsafePerformIO! hackyDebugTrace s v = unsafePerformIO (putStrLn s >>= \_ -> return v)