module Lib.Util exposing (..) import Dict -- Delete an element from a List delidx : Int -> List a -> List a delidx n l = List.take n l ++ List.drop (n+1) l -- Modify an element in a List modidx : Int -> (a -> a) -> List a -> List a modidx n f = List.indexedMap (\i e -> if i == n then f e else e) isJust : Maybe a -> Bool isJust m = case m of Just _ -> True _ -> False -- Returns true if the list contains duplicates hasDuplicates : List comparable -> Bool hasDuplicates l = let step e acc = case acc of Nothing -> Nothing Just m -> if Dict.member e m then Nothing else Just (Dict.insert e True m) in case List.foldr step (Just Dict.empty) l of Nothing -> True Just _ -> False -- Haskell's 'lookup' - find an entry in an association list lookup : a -> List (a,b) -> Maybe b lookup n l = List.filter (\(a,_) -> a == n) l |> List.head |> Maybe.map Tuple.second