X-Git-Url: https://git.distorted.org.uk/~mdw/fringe/blobdiff_plain/d87584d71b1c587112f039ab69a5af8b083b18be..ca488b918794c92c47c157a9e18ccb478cf6be40:/haskell-fringe.hs diff --git a/haskell-fringe.hs b/haskell-fringe.hs index 78c6362..f7aa711 100644 --- a/haskell-fringe.hs +++ b/haskell-fringe.hs @@ -1,13 +1,13 @@ --- -*-haskell-*- --- --- Haskell implementation of a `same-fringe' solver. +--- -*-haskell-*- +--- +--- Haskell implementation of a `same-fringe' solver. import IO import System import Monad ----------------------------------------------------------------------------- --- Parser combinators. +--- Parser combinators. -- A very simple parser monad. newtype Parser t a = Parser { runparse :: [t] -> Either String (a, [t]) } @@ -56,14 +56,14 @@ eof = do _ -> fail "trailing junk" ----------------------------------------------------------------------------- --- Tree data type. +--- Tree data type. -data Tree a = Leaf | Node (Tree a, a, Tree a) deriving (Show) +data Tree a = Leaf | Node (Tree a) a (Tree a) deriving (Show) -- Return the elements inorder, as a list. fringe t = gather t [] where gather Leaf ns = ns - gather (Node (l, x, r)) ns = gather l (x : gather r ns) + gather (Node l x r) ns = gather l (x : gather r ns) -- Answer whether two trees have the same fringe. sameFringe t tt = fringe t == fringe tt -- trivial! @@ -81,11 +81,11 @@ parseTree cs = parse cs $ do t <- tree; eof; return t case r of Just '(' -> do step; left <- tree; c <- anytok "no data"; right <- tree; delim ')' - return $ Node (left, c, right) + return $ Node left c right _ -> return Leaf ----------------------------------------------------------------------------- --- Main program. +--- Main program. -- Report MSG as an error and quit. bail msg = do