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 - ra...@froglogic.com
www.froglogic.com - Multi-Platform GUI Testing


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

Reply via email to