[Haskell-cafe] Irritating Referential Transparency behavior?
Brandon Allbery
allbery.b at gmail.com
Sun Aug 10 18:36:59 UTC 2014
On Sun, Aug 10, 2014 at 2:20 PM, martin <martin.drautzburg at web.de> wrote:
> but when I replace xxx by myStep pState as in
>
> exProcess2 pState loc = LP {lstep = myStep pState}
> where
> xxx = myStep pState
> myStep _ = return $ \(E t l _) -> ([E (t+1) l Wakeup], (proc'
> pState))
> proc' state = exProcess2 (trc state) loc
>
> I get
>
> No instance for (Monad m0) arising from a use of `myStep'
> The type variable `m0' is ambiguous
> Possible fix: add a type signature that fixes these type variable(s)
>
> It compiles again when I remove the xxx = line. Why is that so?
>
It has to assign some kind of concrete type to `xxx`. If you are using it
as in the example I elided, it has enough information to type it; if you do
not have it at all, it obviously does not need to type it; if you define it
but do not use it, it doesn't know it should ignore the definition (being
an unused local binding, this is safe) and dies trying to infer a type for
it anyway. Referential transparency is not involved (except perhaps
incidentally).
If there is a bug here, it is that it doesn't recognize that it should
simply drop/ignore (with a warning) the definition of `xxx` because it's
not reachable. Arguably, however, that is programmer error.
--
brandon s allbery kf8nh sine nomine associates
allbery.b at gmail.com ballbery at sinenomine.net
unix, openafs, kerberos, infrastructure, xmonad http://sinenomine.net
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20140810/826f6045/attachment.html>
More information about the Haskell-Cafe
mailing list