On 1 Jul 2013, at 16:07, Vlatko Basic wrote:

> I had a (simplified) record
> 
>  data P = P {
>    a :: String,
>    b :: String,
>    c :: IO String
>    } deriving (Show, Eq)
> 
> but to get automatic deriving of 'Show' and 'Eq' for 'data P' I have created 
> 'newtype IOS' and its 'Show' and 'Eq' instances
> 
>  newtype IOS = IO String

Not quite!  That is a newtype'd String, not a newtype's (IO String).  Try this:

    newtype IOS = IOS (IO String)

> but now when I try to set 'c' field in
> 
>    return $ p {c = readFile path}
> 
> I get error
>  Couldn't match expected type `IOS' with actual type `IO String'

Use the newtype constructor to convert an IO String -> IOS.

    return $ p {c = IOS $ readFile path}

Regards,
    Malcolm
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to