summaryrefslogtreecommitdiff |
diff options
author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2020-05-10 18:08:26 +0200 |
---|---|---|
committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2020-05-10 18:08:26 +0200 |
commit | fc09d979e4c753377131684b1100c250e89765ea (patch) | |
tree | a79689b720794b4a5503ac63ff4c84dfd04e6f41 /src/shared/elm/Shared/Util | |
parent | d2667e46fec8f15c29ffa80925d33b6931d8aa3b (diff) |
...
Diffstat (limited to 'src/shared/elm/Shared/Util')
-rw-r--r-- | src/shared/elm/Shared/Util/Array.elm | 54 | ||||
-rw-r--r-- | src/shared/elm/Shared/Util/Html.elm | 6 | ||||
-rw-r--r-- | src/shared/elm/Shared/Util/Http.elm | 22 | ||||
-rw-r--r-- | src/shared/elm/Shared/Util/List.elm | 50 |
4 files changed, 132 insertions, 0 deletions
diff --git a/src/shared/elm/Shared/Util/Array.elm b/src/shared/elm/Shared/Util/Array.elm new file mode 100644 index 0000000..234b4c4 --- /dev/null +++ b/src/shared/elm/Shared/Util/Array.elm @@ -0,0 +1,54 @@ +module Shared.Util.Array exposing + ( + update, + update_unsafe, + filter_first, + indexed_search + ) + +import List +import Array + +update : ( + Int -> + ((Maybe t) -> (Maybe t)) -> + (Array.Array t) -> + (Array.Array t) + ) +update index fun array = + case (fun (Array.get index array)) of + Nothing -> array + (Just e) -> (Array.set index e array) + +update_unsafe : ( + Int -> + (t -> t) -> + (Array.Array t) -> + (Array.Array t) + ) +update_unsafe index fun array = + case (Array.get index array) of + Nothing -> array + (Just e) -> (Array.set index (fun e) array) + +filter_first : (t -> Bool) -> (Array.Array t) -> (Maybe t) +filter_first fun array = + (Array.get 0 (Array.filter fun array)) + +indexed_search : (t -> Bool) -> (Array.Array t) -> (Maybe (Int, t)) +indexed_search fun array = + (List.foldl + (\v res -> + ( + case res of + (Just e) -> res + Nothing -> + let (index, value) = v in + if (fun value) + then (Just v) + else Nothing + ) + ) + Nothing + (Array.toIndexedList array) + ) diff --git a/src/shared/elm/Shared/Util/Html.elm b/src/shared/elm/Shared/Util/Html.elm new file mode 100644 index 0000000..8b803f7 --- /dev/null +++ b/src/shared/elm/Shared/Util/Html.elm @@ -0,0 +1,6 @@ +module Shared.Util.Html exposing (nothing) + +import Html + +nothing : (Html.Html a) +nothing = (Html.text "") diff --git a/src/shared/elm/Shared/Util/Http.elm b/src/shared/elm/Shared/Util/Http.elm new file mode 100644 index 0000000..2e57819 --- /dev/null +++ b/src/shared/elm/Shared/Util/Http.elm @@ -0,0 +1,22 @@ +module Shared.Util.Http exposing (error_to_string) + +import Http + +error_to_string : Http.Error -> String +error_to_string error = + case error of + (Http.BadUrl string) -> ("Invalid URL: \"" ++ string ++ "\"") + Http.Timeout -> "Timed out" + Http.NetworkError -> "Connection lost, network error." + (Http.BadStatus response) -> + ( + "The HTTP request failed: " + ++ (String.fromInt response) + ++ "." + ) + (Http.BadBody string) -> + ( + "Server response not understood:\"" + ++ string + ++ "\"." + ) diff --git a/src/shared/elm/Shared/Util/List.elm b/src/shared/elm/Shared/Util/List.elm new file mode 100644 index 0000000..6a22a5a --- /dev/null +++ b/src/shared/elm/Shared/Util/List.elm @@ -0,0 +1,50 @@ +module Shared.Util.List exposing (..) + +import Set + +import List + +pop : List a -> (Maybe (a, List a)) +pop l = + case l of + (head :: tail) -> (Just (head, tail)) + [] -> Nothing + +get_first : (a -> Bool) -> (List a) -> (Maybe a) +get_first fun list = + (List.head (List.filter fun list)) + +product_map : (a -> b -> c) -> (List a) -> (List b) -> (List c) +product_map product_fun list_a list_b = + (product_map_rec (product_fun) list_a list_b []) + +product_map_rec : (a -> b -> c) -> (List a) -> (List b) -> (List c) -> (List c) +product_map_rec product_fun list_a list_b result = + case (pop list_a) of + Nothing -> result + (Just (head, tail)) -> + (product_map_rec + (product_fun) + tail + list_b + (List.append + (List.map (product_fun head) list_b) + result + ) + ) + +duplicates : (List comparable) -> (Set.Set comparable) +duplicates list = + let + (encountered, final_result) = + (List.foldl + (\elem (met, result) -> + if (Set.member elem met) + then (met, (Set.insert elem result)) + else ((Set.insert elem met), result) + ) + ((Set.empty), (Set.empty)) + list + ) + in + final_result |