[Haskell-cafe] "Casting" newtype to base type?
Malcolm Wallace
malcolm.wallace at me.com
Mon Jul 1 17:24:00 CEST 2013
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
More information about the Haskell-Cafe
mailing list