[Haskell-cafe] type error
Janis Voigtlaender
voigt at tcs.inf.tu-dresden.de
Thu Dec 11 01:55:00 EST 2008
Cetin Sert wrote:
> Hi,
>
> Why does this not function?
>
> Prelude> sequence [print 'a', print 2]
> 'a'
> 2
> [(),()]
> *Prelude> let myprint = print*
> *Prelude> sequence [myprint 'a', myprint 2]*
>
> <interactive>:1:18:
> Couldn't match expected type `()' against inferred type `Char'
> In the first argument of `myprint', namely 'a'
> In the expression: myprint 'a'
> In the first argument of `sequence', namely
> `[myprint 'a', myprint 2]'
The problem is the monomorphism restriction:
~> ghci
GHCi, version 6.8.2: http://www.haskell.org/ghc/ :? for help
Loading package base ... linking ... done.
Prelude> :t print
print :: (Show a) => a -> IO ()
Prelude> let myprint=print
Prelude> :t myprint
myprint :: () -> IO ()
Prelude> :q
Leaving GHCi.
~> ghci -fno-monomorphism-restriction
GHCi, version 6.8.2: http://www.haskell.org/ghc/ :? for help
Loading package base ... linking ... done.
Prelude> let myprint=print
Prelude> :t myprint
myprint :: (Show a) => a -> IO ()
> Can providing some type annotations (interactively in ghci or in some
> .hs file) help solve the problem?
Yes.
--
Dr. Janis Voigtlaender
http://wwwtcs.inf.tu-dresden.de/~voigt/
mailto:voigt at tcs.inf.tu-dresden.de
More information about the Haskell-Cafe
mailing list