summaryrefslogtreecommitdiff
path: root/Utility.hs
diff options
context:
space:
mode:
authorTom Smeding <tom.smeding@gmail.com>2018-04-19 11:45:46 +0200
committerTom Smeding <tom.smeding@gmail.com>2018-04-19 11:45:46 +0200
commitaf425841a63ee73603cc09510d95a36e646ddafd (patch)
tree08a1ef8435ec0ab07887256a1c86f908c2389a1a /Utility.hs
parent8d9d27d64d9e39ea76fd878e928e553944735e45 (diff)
Build with stack
Diffstat (limited to 'Utility.hs')
-rw-r--r--Utility.hs28
1 files changed, 28 insertions, 0 deletions
diff --git a/Utility.hs b/Utility.hs
new file mode 100644
index 0000000..a160cb7
--- /dev/null
+++ b/Utility.hs
@@ -0,0 +1,28 @@
+module Utility where
+
+import Data.List
+
+--if any of the predicates returns true, options returns true
+options :: [a -> Bool] -> a -> Bool
+options l x = any id [f x | f <- l]
+
+fixpoint :: (Eq a) => (a -> a) -> a -> a
+fixpoint f x = let fx = f x in if fx == x then x else fixpoint f fx
+
+setcompareBy :: (a -> a -> Bool) -> [a] -> [a] -> Bool
+setcompareBy _ [] [] = True
+setcompareBy _ [] _ = False
+setcompareBy _ _ [] = False
+setcompareBy p a@(x:xs) b = length a == length b && setcompareBy p xs (deleteBy p x b)
+
+deleteIndex :: Int -> [a] -> [a]
+deleteIndex 0 (_:xs) = xs
+deleteIndex i (x:xs) | i > 0 = x : deleteIndex (i-1) xs
+
+fromLeft :: Either a b -> a
+fromLeft (Left a) = a
+fromLeft (Right _) = undefined
+
+fromRight :: Either a b -> b
+fromRight (Left _) = undefined
+fromRight (Right b) = b