
Am 7/1/2013 5:07 PM, schrieb Vlatko Basic:
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
What you really want is newtype IOS = IOS (IO String) I.e. a IOS value "wraps" an IO String.
data P = P { a :: String, b :: String, c :: IOS } deriving (Show, Eq)
but now when I try to set 'c' field in
fun :: FilePath -> P -> IO P fun path p = do b <- doesFileExist path ... return $ p {c = readFile path}
I get error Couldn't match expected type `IOS' with actual type `IO String'
which is correct.
So, the question is:
Is it possible to somehow "cast" 'IO String' to 'IOS'
With the change to your 'newtype', you could use return $ p {c = IOS (readFile path)} instead. -- Frerich Raabe - raabe@froglogic.com www.froglogic.com - Multi-Platform GUI Testing