GHC doesn't like its own type?
Iavor Diatchki
diatchki@cse.ogi.edu
Wed, 30 Apr 2003 16:02:03 -0700
hi,
i remeber some time ago levent erkok run intro a simillar problem. take
a look at this post:
http://www.mail-archive.com/haskell@haskell.org/msg06754.html
i think the problem is that when you add a type signature things may
become more polymorphic,
but i am not sure if this is what you are running into. as your second
point illustrates, there also seems to be a bug in ghc.
bye
iavor
oleg@pobox.com wrote:
>The previously message "Deeply uncurried products, as categorists
>might like them" can be used to demonstrate certain behavior of GHC
>that seems a bit odd. If we save the text of that message in a file,
>/tmp/a.lhs, we can load it into GHC:
>
> $ ghci -fglasgow-exts /tmp/a.lhs
> GHC Interactive, version 5.04.1
> Ok, modules loaded: Main.
> *Main>
>
>The whole code loads and typechecks. The code contains the following
>definition, without an explicit type signature:
>
>
>
>>fcomp a = (. fapp) (mcomp a)
>>
>>
>
>We can ask GHCi to tell us the type of fcomp:
>
> *Main> :type fcomp
> forall result f1 a f2 c cp.
> (FApp a cp c, MCompose f2 cp c result) =>
> (f1 -> f2) -> a -> f1 -> result
>
>and make that type, verbatim, to be the signature of fcomp:
>
>
>
>>fcomp:: forall result f1 a f2 c cp. (FApp a cp c, MCompose f2 cp c result) => (f1 -> f2) -> a -> f1 -> result
>>fcomp a = (. fapp) (mcomp a)
>>
>>
>
>If we reload the file, we get an error:
>
>/tmp/a.lhs:124:
> Could not deduce (FApp a cp c1)
> from the context (FApp a cp c, MCompose f2 cp c result)
> Probable fix:
> Add (FApp a cp c1) to the type signature(s) for `fcomp'
> arising from use of `fapp' at /tmp/a.lhs:124
> In the second argument of `(.)', namely `fapp'
> In the definition of `fcomp': (. fapp) (mcomp a)
>
>/tmp/a.lhs:124:
> Could not deduce (MCompose f2 cp c1 result)
> from the context (FApp a cp c, MCompose f2 cp c result)
> Probable fix:
> Add (MCompose f2 cp c1 result) to the type signature(s) for `fcomp'
> arising from use of `mcomp' at /tmp/a.lhs:124
> In the first argument of `(. fapp)', namely `(mcomp a)'
> In the definition of `fcomp': (. fapp) (mcomp a)
>
>I used to think that the inferred type is the most general type, and
>that the compiler would accept as explicit the type that it itself
>inferred. I was wrong?
>
>The second odd circumstance is best illustrated by the following
>transcript. Assume that /tmp/a.lhs is the text of the previous message
>as it was posted:
>
> $ ghci -fglasgow-exts /tmp/a.lhs
> GHC Interactive, version 5.04.1, for Haskell 98.
> Loading package base ... linking ... done.
> Loading package haskell98 ... linking ... done.
> Compiling Main ( /tmp/a.lhs, interpreted )
>
> /tmp/a.lhs:76: Warning: No 'main' defined in module Main
> Ok, modules loaded: Main.
> *Main> let x = \f -> fapp f (('a','b'),('c',('d','e')))
> Bus error (core dumped)
>
>Incidentally, if I enter
>
>
>>x = \f -> fapp f (('a','b'),('c',('d','e')))
>>
>>
>into /tmp/a.lhs and load the file into GHCi, I get
>
>ghc-5.04.1: panic! (the `impossible' happened, GHC version 5.04.1):
> rdrNameModule zddFApp
>_______________________________________________
>Haskell mailing list
>Haskell@haskell.org
>http://www.haskell.org/mailman/listinfo/haskell
>
>
>