serialization - Serializing data structures to a file with Haskell? -
i'm new haskell , i'm trying figure out how io works. have data structure, tree, want serialize file , de-serialize out data structure. seems should able through show , read, use of read throwing error. here's relevant part of code:
data tree = answer string | question string tree tree deriving (read, show) filetotree :: (read a) => filepath -> io filetotree filepath = datastruct <- readfile filepath return (read datastruct) treetofile :: (show a) => -> filepath -> io () treetofile datastruct filepath = writefile filepath (show datastruct) main = let filepath = "data.txt" let ds = filetotree filepath ask ds treetofile ds filepath ask :: tree -> io () ask (question q yes no) = putstrln q answer <- getline
the error i'm getting "couldn't match expected type 'tree' against inferred type 'io a' in first argument of 'ask'". seems read should return tree type, it's returning io type. there way coerce tree type, or totally mis-reading problem?
note filetotree
returns value in io
. means line let ds = filetotree filepath
binding io a
ds
identifier. if want work on value obtain in io
monad, need use >>=
(bind) function io
monad replacing let ds = filetotree filepath
line ds <- filetotree filepath
. bind of type a
ds
, in sense stripping off outer io
. call ask
unify a
tree
.
with out of way, there seems issue ask
. have above doesn't compile, , seems though not using answer
, guessing error in pasting code.
Comments
Post a Comment