GHC 8.0.1 is available
ghc.haskell.org
ghc.haskell.org
* The introduction of the DuplicateRecordFields language extension, allowing
multiple record types to declare fields of the same name
Holy hell. Is this the end of the Haskell record field names problem?One of Haskell's great miseries has been that, because record field accessors are declared globally, you couldn't define records with fields of the same names:
data Person = Person { name :: String, age :: Int }
data Object = Object { name :: String, id :: UUID } -- error! `name` taken
--Edit: Info on the extension at: https://ghc.haskell.org/trac/ghc/wiki/Records/OverloadedReco.... Looks like it creates ambiguity in some cases.
Some other issues might be:
* The Prelude is hard to update for compatibility reasons, so it clashes with modern Haskell somewhat. A lot of projects will roll their own prelude and add 'NoImplicitPrelude' to the project options.
* There's also this presentation: https://secure.plaimi.net/~alexander/tmp/pres/2016-05-11-why...
* Deploying Haskell programs to older corporate servers is doable, but not at all obvious. Stick with C, Bash, and older Perls(5.8.8 is on my router) for maximum portability, if you expect to deploy to servers with a 10 year old image.
What would be nice is if Haskell would allow any name collision so long as it could use the type system to disambiguate the function.
That would need very careful design to work well with type inference, I suppose?
Coincidentally, the reason why that practice is still visible in some C structures today is because very early C compilers had a similar limitation:
http://stackoverflow.com/questions/35874187/prefixes-in-memb...
You can build GHC with musl libc and then make truly portable static binaries but it isn't that easy.
https://www.reddit.com/r/haskell/comments/37m7q7/ghc_musl_ea...
https://github.com/mitchty/alpine-linux-ghc-bootstrap
Recently updated last week to 8.0.1, and its submitted upstream but not yet accepted because alpine linux 3.4 is about to come out.
If you want to try it now you can docker pull mitchty/alpine-ghc:8.0
I haven't tried building a statically linked musl ghc, and I honestly don't know how, but it'd be great to figure out. Any pointers? Speaking of static musl builds, that can be a good choice to create a single bindist of GHC that works on CentOS, Debian, Alpine, and any other Linux distro. Seeing how Docker defaults to Alpine images, it could be beneficial in that regard as well.
Presentation: https://secure.plaimi.net/~alexander/tmp/pres/2016-05-11-why...
EDIT: Also, if you find the colors on the slide show intolerable, the page source is well-formatted and readable. Content starts at line 200.
(I don't need multiple namespaces per file so much for the finished program, but it's handy when developing.)
* Significant improvements in error message readability and
content, including facilities for libraries to provide custom
error messages, more aggressive warnings for fragile rewrite
rules, and more helpful errors for missing imports.
I'm really excited about this. Any push towards more decipherable error messages should be huge in increasing adoption (which leads to more awesome libraries and opportunities to use it for our day jobs).I still see plenty of errors that remind me of this post. https://izbicki.me/blog/error-messages-in-ghc-vs-g%2B%2B.htm...
https://www.reddit.com/r/haskell/comments/4kdb74/is_a_stacka...
I'm looking forward to trying out the new debugging support: gdb was unusable with older GHCs.
Implicit callstacks are cool: Remember that you can hide the parameter inside of your application's main monad:
type MyApplicationM a = (?l :: CallStack) => StateT ConnectionPool IO a
I've certainly run into a lot of the other stuff too. Good release all-around!Indeed; it should be slightly better now but as the documentation says, there are still plenty of rough edges. I certainly wouldn't recommend it for day-to-day use. I have a patch set in the works which ought to fix the remaining issues so hopefully 8.2 will finally be usable.
However, in my experience the implicit callstack functionality along with the ability to provide callstacks from profiling information greatly reduces the need for DWARF unwinding for debugging (low-cost profiling, on the other hand, it may still be quite useful for).
HTML of the same section is fine.
There must be a way to fix this in the pipeline. I mean, you cannot find each and all and try to manually adjust the text.
[1]: https://ghc.readthedocs.io/en/latest/8.0.1-notes.html#hsc2hs