[Haskell-cafe] How to "instance MonadIO Identity"?

Antoine Latter aslatter at gmail.com
Tue Dec 28 07:05:33 CET 2010


There are a couple of ways to handle this - either call
getSystemEncoding on the outside, before calling 'runWriter', and then
pass it in to your writer computation, or use 'WriterT IO' instead of
'Writer'.

That would be something like:

main = do
  result <- runWriterT ( computation involving 'tell' and 'liftIO')
  ( computation using result)

The error message in your case can be difficult to understand - the
'Writer' type is a synonym for the type 'WriterT Identity'. Since none
of these types involve IO, then liftIO can't be used.

Antoine


On Tue, Dec 28, 2010 at 12:47 AM, Magicloud Magiclouds
<magicloud.magiclouds at gmail.com> wrote:
>  Ah, that is a bad news.
>  I am using Control.Monad.Writer and Data.Encoding. Code like (not compilable)
> 43|instance WithMessage String where
> 44|  append s = (liftIO $ getSystemEncoding) >>= (\e -> tell $
> encodeLazyByteString e s)
>  May I know how to make this work?
>
> 2010/12/28 Michael Snoyman <michael at snoyman.com>:
>> The only way to create such an instance would be with unsafePerformIO,
>> which in this case would be a Very Bad Idea (tm).
>>
>> Michael
>>
>> On Tue, Dec 28, 2010 at 7:29 AM, Magicloud Magiclouds
>> <magicloud.magiclouds at gmail.com> wrote:
>>> Hi,
>>>  From another thread in this list, I got code as:
>>>> instance MonadIO Identity where
>>>>     liftIO = id
>>>  Well, it does not work for me as:
>>> Message.hs:22:12:
>>>    Couldn't match expected type `Identity a' with actual type `IO a'
>>>    Expected type: IO a -> Identity a
>>>      Actual type: IO a -> IO a
>>>    In the expression: id
>>>    In an equation for `liftIO': liftIO = id
>>> --
>>> 竹密岂妨流水过
>>> 山高哪阻野云飞
>>>
>>> _______________________________________________
>>> Haskell-Cafe mailing list
>>> Haskell-Cafe at haskell.org
>>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>>
>>
>
>
>
> --
> 竹密岂妨流水过
> 山高哪阻野云飞
>
> _______________________________________________
> 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