module Util (
boolToInt
, safeHead
, safeTail
, findIndexes) where
boolToInt :: Bool -> Int
boolToInt :: Bool -> Int
boolToInt Bool
True = Int
1
boolToInt Bool
False = Int
0
safeHead :: [a] -> Maybe a
safeHead :: forall a. [a] -> Maybe a
safeHead [] = Maybe a
forall a. Maybe a
Nothing
safeHead (a
x:[a]
xs) = a -> Maybe a
forall a. a -> Maybe a
Just a
x
safeTail :: [a] -> [a]
safeTail :: forall a. [a] -> [a]
safeTail [] = []
safeTail (a
x:[a]
xs) = [a]
xs
findIndexes :: Eq a => [a] -> a -> [Int]
findIndexes :: forall a. Eq a => [a] -> a -> [Int]
findIndexes [a]
xs a
a = [Int] -> [Int]
forall a. [a] -> [a]
reverse ([Int] -> [Int]) -> [Int] -> [Int]
forall a b. (a -> b) -> a -> b
$ [a] -> Int -> [Int] -> [Int]
forall {a}. Num a => [a] -> a -> [a] -> [a]
go [a]
xs Int
0 []
where
go :: [a] -> a -> [a] -> [a]
go (a
x:[a]
xs) a
i [a]
inds = if a
x a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
a then [a] -> a -> [a] -> [a]
go [a]
xs (a
i a -> a -> a
forall a. Num a => a -> a -> a
+ a
1) (a
ia -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
inds)
else [a] -> a -> [a] -> [a]
go [a]
xs (a
i a -> a -> a
forall a. Num a => a -> a -> a
+ a
1) [a]
inds
go [] a
i [a]
inds = [a]
inds