[Haskell-cafe] flipped IO sequence

Martin Huschenbett huschi at gmx.org
Wed Oct 1 06:41:55 EDT 2008


Hi Cetin,

what you seem to want is

> warn :: String -> IO Int
> warn = (return 1 <<) . putStrLn

Cetin Sert schrieb:
> warn :: String → IO Int
> warn = return 1 << putStrLn            -- causes an error
>   -- = \msg → return 1 << putStrLn msg -- works just fine
>   -- = \msg → putStrLn msg >> return 1 -- works just fine
> 
> (<<) :: Monad m ⇒ m b → m a → m b
> b << a = a >>= \_ → b
> 
> Why do I get this compile-time error?? How can one define << ?
> 
> cetin at linux-d312:~/lab/test/qths/p> ghc -fglasgow-exts -O2 -o d64x 
> --make demo2.hs system.hs
> [1 of 2] Compiling Netman.System    ( system.hs, system.o )
> 
> system.hs:23:14:
>     No instance for (Num (IO Int))
>       arising from the literal `1' at system.hs:23:14
>     Possible fix: add an instance declaration for (Num (IO Int))
>     In the first argument of `return', namely `1'
>     In the first argument of `(<<)', namely `return 1'
>     In the expression: return 1 << putStrLn
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe


More information about the Haskell-Cafe mailing list