{-# LANGUAGE QuantifiedConstraints #-}
module Defaultable.Map.Generalized
( Defaultable(..)
, fromMap
, singleton
, fromList
, insert
, withDefault
, toMap
, toDefault
) where
import Control.Applicative (empty, (<|>))
import Data.Functor.Apply (Apply)
import Defaultable.Map (Defaultable(..))
import GHC.Exts (IsList(Item))
import qualified GHC.Exts as Exts
fromMap :: map value -> Defaultable map value
fromMap :: map value -> Defaultable map value
fromMap map value
map_ = map value -> Maybe value -> Defaultable map value
forall (map :: * -> *) value.
map value -> Maybe value -> Defaultable map value
Defaultable map value
map_ Maybe value
forall (f :: * -> *) a. Alternative f => f a
empty
singleton :: IsList (map value) => Item (map value) -> Defaultable map value
singleton :: Item (map value) -> Defaultable map value
singleton Item (map value)
item = [Item (map value)] -> Defaultable map value
forall (map :: * -> *) value.
IsList (map value) =>
[Item (map value)] -> Defaultable map value
fromList [ Item (map value)
item ]
fromList :: IsList (map value) => [ Item (map value) ] -> Defaultable map value
fromList :: [Item (map value)] -> Defaultable map value
fromList [Item (map value)]
items = map value -> Defaultable map value
forall (map :: * -> *) value. map value -> Defaultable map value
fromMap ([Item (map value)] -> map value
forall l. IsList l => [Item l] -> l
Exts.fromList [Item (map value)]
items)
insert
:: (IsList (map value), Apply map, forall a . Monoid (map a))
=> Item (map value)
-> Defaultable map value
-> Defaultable map value
insert :: Item (map value) -> Defaultable map value -> Defaultable map value
insert Item (map value)
item Defaultable map value
defaultable = Item (map value) -> Defaultable map value
forall (map :: * -> *) value.
IsList (map value) =>
Item (map value) -> Defaultable map value
singleton Item (map value)
item Defaultable map value
-> Defaultable map value -> Defaultable map value
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Defaultable map value
defaultable
withDefault
:: (Apply map, forall a . Monoid (map a))
=> Defaultable map value
-> value
-> Defaultable map value
Defaultable map value
defaultable withDefault :: Defaultable map value -> value -> Defaultable map value
`withDefault` value
default_ = Defaultable map value
defaultable Defaultable map value
-> Defaultable map value -> Defaultable map value
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> value -> Defaultable map value
forall (f :: * -> *) a. Applicative f => a -> f a
pure value
default_
toMap :: Defaultable map value -> map value
toMap :: Defaultable map value -> map value
toMap (Defaultable map value
map_ Maybe value
_) = map value
map_
toDefault :: Defaultable map value -> Maybe value
toDefault :: Defaultable map value -> Maybe value
toDefault (Defaultable map value
_ Maybe value
default_) = Maybe value
default_