module Toml.Codec.Combinator.Monoid
(
all
, any
, sum
, product
, first
, last
) where
import Prelude hiding (all, any, last, product, sum)
import Data.Monoid (All (..), Any (..), First (..), Last (..), Product (..), Sum (..))
import Toml.Codec.Combinator.Primitive (bool)
import Toml.Codec.Di (dimap, dioptional, diwrap)
import Toml.Codec.Types (TomlCodec)
import Toml.Type.Key (Key)
all :: Key -> TomlCodec All
all :: Key -> TomlCodec All
all = forall b a. (b -> a) -> (a -> b) -> TomlCodec a -> TomlCodec b
dimap (forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. All -> Bool
getAll) (forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty Bool -> All
All) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TomlCodec a -> TomlCodec (Maybe a)
dioptional forall b c a. (b -> c) -> (a -> b) -> a -> c
. Key -> TomlCodec Bool
bool
{-# INLINE all #-}
any :: Key -> TomlCodec Any
any :: Key -> TomlCodec Any
any = forall b a. (b -> a) -> (a -> b) -> TomlCodec a -> TomlCodec b
dimap (forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. Any -> Bool
getAny) (forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty Bool -> Any
Any) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TomlCodec a -> TomlCodec (Maybe a)
dioptional forall b c a. (b -> c) -> (a -> b) -> a -> c
. Key -> TomlCodec Bool
bool
{-# INLINE any #-}
sum :: (Num a) => (Key -> TomlCodec a) -> Key -> TomlCodec (Sum a)
sum :: forall a. Num a => (Key -> TomlCodec a) -> Key -> TomlCodec (Sum a)
sum Key -> TomlCodec a
codec = forall b a. (b -> a) -> (a -> b) -> TomlCodec a -> TomlCodec b
dimap (forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Sum a -> a
getSum) (forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty forall a. a -> Sum a
Sum) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TomlCodec a -> TomlCodec (Maybe a)
dioptional forall b c a. (b -> c) -> (a -> b) -> a -> c
. Key -> TomlCodec a
codec
{-# INLINE sum #-}
product :: (Num a) => (Key -> TomlCodec a) -> Key -> TomlCodec (Product a)
product :: forall a.
Num a =>
(Key -> TomlCodec a) -> Key -> TomlCodec (Product a)
product Key -> TomlCodec a
codec = forall b a. (b -> a) -> (a -> b) -> TomlCodec a -> TomlCodec b
dimap (forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Product a -> a
getProduct) (forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty forall a. a -> Product a
Product) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TomlCodec a -> TomlCodec (Maybe a)
dioptional forall b c a. (b -> c) -> (a -> b) -> a -> c
. Key -> TomlCodec a
codec
{-# INLINE product #-}
first :: (Key -> TomlCodec a) -> Key -> TomlCodec (First a)
first :: forall a. (Key -> TomlCodec a) -> Key -> TomlCodec (First a)
first Key -> TomlCodec a
codec = forall b a. Coercible a b => TomlCodec a -> TomlCodec b
diwrap forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TomlCodec a -> TomlCodec (Maybe a)
dioptional forall b c a. (b -> c) -> (a -> b) -> a -> c
. Key -> TomlCodec a
codec
{-# INLINE first #-}
last :: (Key -> TomlCodec a) -> Key -> TomlCodec (Last a)
last :: forall a. (Key -> TomlCodec a) -> Key -> TomlCodec (Last a)
last Key -> TomlCodec a
codec = forall b a. Coercible a b => TomlCodec a -> TomlCodec b
diwrap forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TomlCodec a -> TomlCodec (Maybe a)
dioptional forall b c a. (b -> c) -> (a -> b) -> a -> c
. Key -> TomlCodec a
codec
{-# INLINE last #-}