-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Finitely represented /total/ EnumMaps
--
-- Finitely represented total EnumMaps. Comprises a partial
-- EnumMap and a default value. Has Applicative and Monad instances,
-- unlike EnumMap.
--
-- Inspired by Conal's Data.TotalMap:
-- http://hackage.haskell.org/package/total-map
@package enumfun
@version 0.5.1.0
-- | Finitely represented total EnumMaps. Comprises a partial
-- EnumMap and a default value. Has Applicative and Monad instances,
-- unlike EnumMap.
--
-- Inspired by Conal's Data.TotalMap:
-- http://hackage.haskell.org/package/total-map
module Data.EnumFun.Strict
-- | Total EnumMap.
data EnumFun k v
-- | Default value and a finite map.
EnumFun :: !v -> !(EnumMap k v) -> EnumFun k v
-- | Sample a total map. Semantic function.
(!) :: Enum k => EnumFun k v -> k -> v
-- | Optimise an EnumFun, weeding out any explicit default values. A
-- semantic no-op, i.e., (!) . trim == (!).
trim :: Eq v => EnumFun k v -> EnumFun k v
-- | Create an EnumFun from a default value and a list of key/value
-- pairs.
fromList :: Enum k => v -> [(k, v)] -> EnumFun k v
-- | Convert from a Lazy EnumFun. The operation is essentially free; we
-- only needed two distinct types for the different class instances.
fromLazy :: EnumFun k v -> EnumFun k v
instance Enum k => Monad (EnumFun k)
instance (Enum k, Monoid v) => Monoid (EnumFun k v)
instance Enum k => Applicative (EnumFun k)
-- | Finitely represented total EnumMaps. Comprises a partial
-- EnumMap and a default value. Has Applicative and Monad instances,
-- unlike EnumMap.
--
-- Inspired by Conal's Data.TotalMap:
-- http://hackage.haskell.org/package/total-map
module Data.EnumFun.Lazy
-- | Total EnumMap.
data EnumFun k v
-- | Default value and a finite map.
EnumFun :: v -> (EnumMap k v) -> EnumFun k v
-- | Sample a total map. Semantic function.
(!) :: Enum k => EnumFun k v -> k -> v
-- | Optimise an EnumFun, weeding out any explicit default values. A
-- semantic no-op, i.e., (!) . trim == (!).
trim :: Eq v => EnumFun k v -> EnumFun k v
-- | Create an EnumFun from a default value and a list of key/value
-- pairs.
fromList :: Enum k => v -> [(k, v)] -> EnumFun k v
-- | Convert from a Strict EnumFun. The operation is essentially free; we
-- only needed two distinct types for the different class instances.
fromStrict :: EnumFun k v -> EnumFun k v
instance Enum k => Monad (EnumFun k)
instance (Enum k, Monoid v) => Monoid (EnumFun k v)
instance Enum k => Applicative (EnumFun k)