module Utils exposing (..) import Array as A exposing (..) import Base exposing (Word, WordStatus(..)) import Time exposing (Posix, posixToMillis) isNothing : Maybe a -> Bool isNothing p = case p of Nothing -> True Just a -> False isJust : Maybe a -> Bool isJust p = not (isNothing p) flip : (a -> b -> c) -> (b -> a -> c) flip f = \x y -> f y x diffDuration : Posix -> Posix -> Float diffDuration t1 t2 = let m1 = posixToMillis t1 m2 = posixToMillis t2 in toFloat (m2 - m1) / 1000 wordCountWith : Array Word -> (WordStatus -> Bool) -> Int wordCountWith words predicate = words |> A.map .status |> A.filter predicate |> A.length triple : a -> b -> c -> ( a, b, c ) triple a b c = ( a, b, c ) listIdx : List a -> Int -> Maybe a listIdx ls idx = List.head (List.drop idx ls)