{- Story: I had 'Functional programming' exam today ... (which I totally screwed up) After returning to campus I tried to verify some of my results in hugs-Dec2001 The goal was implementing 'cons' parser to parse either '[1,2,3,...]' or '1:2:3:...:[...]' My example didn't worked (what a surprise :( ). I tried to play with hugs ... and made little mistake in my code ... instead of 'cons = numbers >>= (\x -> enumlist >>= (\y -> return (x ++ y)))' I wrote: 'cons = numbers >>= (\x -> listterm >>= (\y -> return (x ++ y)))' ... complete program and result can be found below ... (I'm sending this here because it seems strange getting segfault to me ...) Sincerely, Wejn PS: Please keep in mind this code was written by total beginner (=me) ... -- Michal Safranek <wejn(at)svamberk.net> (svamberk.net's Linux section, fi.muni.cz student, linuxfan)
Bored? Want hours of entertainment? <<< Just set the initdefault to 6! <<<
-} import ParseLib
listterm :: Parser [Int] listterm = cons `chainr1` ops [(symbol "++", (++))] enumlist :: Parser [Int] enumlist = bracket (symbol "[") (sepby int (symbol ",")) (symbol "]") cons :: Parser [Int] -- cons = ...??... numbers :: Parser [Int] numbers = sepby int (symbol ":") cons = numbers >>= (\x -> listterm >>= (\y -> return (x ++ y))) {- -- it really should be: cons = enumlist +++ (numbers >>= (\x -> symbol ":" >> listterm >>= (\y -> return (x ++ y)))) -- (just in case you're interested) -} {- Hugs session for: /usr/local/share/hugs/lib/Prelude.hs /usr/local/share/hugs/lib/Char.hs /usr/local/share/hugs/lib/Monad.hs /usr/local/share/hugs/lib/hugs/ParseLib.hs a.hs Type :? for help Main> papply listterm "1:2:3:[]" Segmentation fault -}
participants (1)
-
Michal Safranek