On Sat, Feb 13, 2016, at 15:32, Christopher Allen wrote:
> There's another problem I discovered with HasCallStack. The implicit
> parameter constraint breaks sharing behavior for examples that use
> bottom.
This is a necessary consequence of the implementation of callstack-aware
functions as overloaded functions. It's really no different from using a
type-class, and is in my opinion the correct behavior.
It seems what you really want is a way to prevent GHC from inferring the
HasCallStack constraint in the first place. That's doable with an
explicit type signature (or even a combinator to wrap the expression),
but this isn't a great solution for your book.
What I'd suggest instead is to define your own undefined in a
Prelude-replacement (or simplification if you will). Something like
undefined :: a
undefined = withFrozenCallStack emptyCallStack Prelude.undefined
should work to remove all traces of CallStacks (including when it blows
up). error can be similarly wrapped to avoid having to deal with
CallStacks, and $ and the FTP-related functions can be specialized to
less-polymorphic versions that are easier to explain to beginners (at
least until they're ready to be exposed to the real versions).
I'm sorry that this change has caused you trouble.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe