module Hydra.Dsl.Lib.Maps where

import Hydra.Phantoms
import Hydra.Sources.Libraries
import qualified Hydra.Dsl.Terms as Terms

import Data.Map


empty :: Datum (Map k v)
empty :: forall k v. Datum (Map k v)
empty = Term -> Datum (Map k v)
forall a. Term -> Datum a
Datum (Term -> Datum (Map k v)) -> Term -> Datum (Map k v)
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_maps_empty

fromList :: Datum ([(k, v)] -> Map k v)
fromList :: forall k v. Datum ([(k, v)] -> Map k v)
fromList = Term -> Datum ([(k, v)] -> Map k v)
forall a. Term -> Datum a
Datum (Term -> Datum ([(k, v)] -> Map k v))
-> Term -> Datum ([(k, v)] -> Map k v)
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_maps_fromList

insert :: Datum (k -> v -> Map k v -> Map k v)
insert :: forall k v. Datum (k -> v -> Map k v -> Map k v)
insert = Term -> Datum (k -> v -> Map k v -> Map k v)
forall a. Term -> Datum a
Datum (Term -> Datum (k -> v -> Map k v -> Map k v))
-> Term -> Datum (k -> v -> Map k v -> Map k v)
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_maps_insert

isEmpty :: Datum (Map k v -> Bool)
isEmpty :: forall k v. Datum (Map k v -> Bool)
isEmpty = Term -> Datum (Map k v -> Bool)
forall a. Term -> Datum a
Datum (Term -> Datum (Map k v -> Bool))
-> Term -> Datum (Map k v -> Bool)
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_maps_isEmpty

keys :: Datum (Map k v -> [k])
keys :: forall k v. Datum (Map k v -> [k])
keys = Term -> Datum (Map k v -> [k])
forall a. Term -> Datum a
Datum (Term -> Datum (Map k v -> [k])) -> Term -> Datum (Map k v -> [k])
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_maps_keys

lookup :: Datum (k -> Map k v -> Maybe v)
lookup :: forall k v. Datum (k -> Map k v -> Maybe v)
lookup = Term -> Datum (k -> Map k v -> Maybe v)
forall a. Term -> Datum a
Datum (Term -> Datum (k -> Map k v -> Maybe v))
-> Term -> Datum (k -> Map k v -> Maybe v)
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_maps_lookup

map :: Datum ((v1 -> v2) -> Map k v1 -> Map k v2)
map :: forall v1 v2 k. Datum ((v1 -> v2) -> Map k v1 -> Map k v2)
map = Term -> Datum ((v1 -> v2) -> Map k v1 -> Map k v2)
forall a. Term -> Datum a
Datum (Term -> Datum ((v1 -> v2) -> Map k v1 -> Map k v2))
-> Term -> Datum ((v1 -> v2) -> Map k v1 -> Map k v2)
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_maps_map

mapKeys :: Datum ((k1 -> k2) -> Map k1 v -> Map k2 v)
mapKeys :: forall k1 k2 v. Datum ((k1 -> k2) -> Map k1 v -> Map k2 v)
mapKeys = Term -> Datum ((k1 -> k2) -> Map k1 v -> Map k2 v)
forall a. Term -> Datum a
Datum (Term -> Datum ((k1 -> k2) -> Map k1 v -> Map k2 v))
-> Term -> Datum ((k1 -> k2) -> Map k1 v -> Map k2 v)
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_maps_mapKeys

remove :: Datum (k -> Map k v -> Map k v)
remove :: forall k v. Datum (k -> Map k v -> Map k v)
remove = Term -> Datum (k -> Map k v -> Map k v)
forall a. Term -> Datum a
Datum (Term -> Datum (k -> Map k v -> Map k v))
-> Term -> Datum (k -> Map k v -> Map k v)
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_maps_remove

singleton :: Datum (k -> v -> Map k v)
singleton :: forall k v. Datum (k -> v -> Map k v)
singleton = Term -> Datum (k -> v -> Map k v)
forall a. Term -> Datum a
Datum (Term -> Datum (k -> v -> Map k v))
-> Term -> Datum (k -> v -> Map k v)
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_maps_singleton

size :: Datum (Map k v -> Int)
size :: forall k v. Datum (Map k v -> Int)
size = Term -> Datum (Map k v -> Int)
forall a. Term -> Datum a
Datum (Term -> Datum (Map k v -> Int)) -> Term -> Datum (Map k v -> Int)
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_maps_size

toList :: Datum (Map k v -> [(k, v)])
toList :: forall k v. Datum (Map k v -> [(k, v)])
toList = Term -> Datum (Map k v -> [(k, v)])
forall a. Term -> Datum a
Datum (Term -> Datum (Map k v -> [(k, v)]))
-> Term -> Datum (Map k v -> [(k, v)])
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_maps_toList

values :: Datum (Map k v -> [v])
values :: forall k v. Datum (Map k v -> [v])
values = Term -> Datum (Map k v -> [v])
forall a. Term -> Datum a
Datum (Term -> Datum (Map k v -> [v])) -> Term -> Datum (Map k v -> [v])
forall a b. (a -> b) -> a -> b
$ Name -> Term
Terms.primitive Name
_maps_values