From 9d2b92dbc1d9e221ce180497cd7d04e0757650a9 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Fri, 15 Jun 2018 14:31:21 +0200 Subject: Split gftest to a new repo --- src/tools/gftest/FMap.hs | 62 ------------------------------------------------ 1 file changed, 62 deletions(-) delete mode 100644 src/tools/gftest/FMap.hs (limited to 'src/tools/gftest/FMap.hs') diff --git a/src/tools/gftest/FMap.hs b/src/tools/gftest/FMap.hs deleted file mode 100644 index f3a511706..000000000 --- a/src/tools/gftest/FMap.hs +++ /dev/null @@ -1,62 +0,0 @@ -module FMap where - --------------------------------------------------------------------------------- --- implementation - -data FMap a b = Ask a (FMap a b) (FMap a b) | Nil | Answer b - deriving ( Eq, Ord, Show ) - -toList :: FMap a b -> [([a],b)] -toList t = go [([],t)] - where - go [] = [] - go ((xs,Ask x yes no):xts) = go ((x:xs,yes):(xs,no):xts) - go ((_ ,Nil) :xts) = go xts - go ((xs,Answer z) :xts) = (reverse xs,z) : go xts - -isNil :: FMap a b -> Bool -isNil = null . toList - -nil :: FMap a b -nil = Nil - -unit :: [a] -> b -> FMap a b -unit [] y = Answer y -unit (x:xs) y = Ask x (unit xs y) Nil - -covers :: Ord a => FMap a b -> [a] -> Bool -Nil `covers` _ = False -_ `covers` [] = True -Answer _ `covers` _ = False -Ask x yes no `covers` zs@(y:ys) = - case x `compare` y of - LT -> (yes `covers` zs) || (no `covers` zs) - EQ -> yes `covers` ys - GT -> False - -ask :: a -> FMap a b -> FMap a b -> FMap a b -ask x Nil Nil = Nil -ask x s t = Ask x s t - -del :: Ord a => [a] -> FMap a b -> FMap a b -del _ Nil = Nil -del _ (Answer _) = Nil -del [] (Ask x yes no) = ask x yes (del [] no) -del (x:xs) t@(Ask y yes no) = - case x `compare` y of - LT -> del xs t - EQ -> ask y (del xs yes) (del xs no) - GT -> ask y yes (del (x:xs) no) - -add :: Ord a => [a] -> b -> FMap a b -> FMap a b -add [] y Nil = Answer y -add (x:xs) y Nil = Ask x (add xs y Nil) Nil -add xs@(_:_) y (Answer _) = add xs y Nil -add (x:xs) y t@(Ask z yes no) = - case x `compare` z of - LT -> Ask x (add xs y Nil) (del xs t) - EQ -> Ask x (add xs y yes) (del xs no) - GT -> Ask z yes (add (x:xs) y no) - --------------------------------------------------------------------------------- - -- cgit v1.2.3