From 6f486a387b623d962868bc514ebe5fcdea84e012 Mon Sep 17 00:00:00 2001 From: Louis Pilfold Date: Thu, 18 Apr 2019 22:11:30 +0000 Subject: map_dict:Map -> map:MapDict, map_dict:take --- src/map_dict.gleam | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/map_dict.gleam b/src/map_dict.gleam index e6f5d3f..489b260 100644 --- a/src/map_dict.gleam +++ b/src/map_dict.gleam @@ -2,59 +2,66 @@ import any import result // TODO: drop -// TODO: take -// TODO: update :: fn(Map(k, v), k, fn(Result(v, NotFound)) -> v) -> Map(k, v) +// TODO: update :: fn(MapDict(k, v), k, fn(Result(v, NotFound)) -> v) -> MapDict(k, v) -pub external type Map(key, value); +pub external type MapDict(key, value); pub enum NotFound = | NotFound -pub external fn size(Map(k, v)) -> Int +pub external fn size(MapDict(k, v)) -> Int = "maps" "size" -pub external fn to_list(Map(key, value)) -> List({key, value}) +pub external fn to_list(MapDict(key, value)) -> List({key, value}) = "maps" "to_list" -pub external fn from_list(List({key, value})) -> Map(key, value) +pub external fn from_list(List({key, value})) -> MapDict(key, value) = "maps" "from_list" -external fn is_key(key, Map(key, v)) -> Bool +external fn is_key(key, MapDict(key, v)) -> Bool = "maps" "is_key" pub fn has_key(map, key) { is_key(key, map) } -pub external fn new() -> Map(key, value) +pub external fn new() -> MapDict(key, value) = "maps" "new" -pub external fn fetch(Map(key, value), key) -> Result(value, NotFound) +pub external fn fetch(MapDict(key, value), key) -> Result(value, NotFound) = "gleam__stdlib" "map_fetch"; -external fn erl_put(key, value, Map(key, value)) -> Map(key, value) +external fn erl_put(key, value, MapDict(key, value)) -> MapDict(key, value) = "maps" "put"; pub fn put(map, key, value) { erl_put(key, value, map) } -external fn erl_map_values(fn(key, value) -> value, Map(key, value)) -> Map(key, value) +external fn erl_map_values(fn(key, value) -> value, MapDict(key, value)) + -> MapDict(key, value) = "maps" "map"; pub fn map_values(map, fun) { erl_map_values(fun, map) } -pub external fn keys(Map(keys, v)) -> List(keys) +pub external fn keys(MapDict(keys, v)) -> List(keys) = "maps" "keys" -pub external fn values(Map(k, values)) -> List(values) +pub external fn values(MapDict(k, values)) -> List(values) = "maps" "values" -external fn erl_filter(fn(key, value) -> Bool, Map(key, value)) -> Map(key, value) +external fn erl_filter(fn(key, value) -> Bool, MapDict(key, value)) + -> MapDict(key, value) = "maps" "filter"; pub fn filter(map, fun) { erl_filter(fun, map) } + +external fn erl_take(List(k), MapDict(k, v)) -> MapDict(k, v) = "maps" "with" + +pub fn take(map, keys) { + erl_take(keys, map) +} -- cgit v1.2.3