{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE GADTs #-}
module Data.MonoTraversable.WrapMonoFoldable (
WrappedMonoFoldable(WrappedMonoFoldable),
wrapMonoFoldable
)
where
import Data.Foldable (
Foldable,
fold,
foldMap,
foldr,
foldl',
foldr1,
foldl1,
toList,
null,
length,
elem,
maximum,
minimum,
sum,
product
)
import Data.MonoTraversable (
MonoFoldable,
Element
)
import qualified Data.MonoTraversable.Unprefixed as MF
data WrappedMonoFoldable mono element where
WrappedMonoFoldable :: (MonoFoldable mono) => mono -> WrappedMonoFoldable mono (Element mono)
instance Foldable (WrappedMonoFoldable mono) where
fold (WrappedMonoFoldable y) = MF.fold y
foldMap x1 (WrappedMonoFoldable y) = MF.foldMap x1 y
foldr x1 x2 (WrappedMonoFoldable y) = MF.foldr x1 x2 y
foldl' x1 x2 (WrappedMonoFoldable y) = MF.foldl' x1 x2 y
toList (WrappedMonoFoldable y) = MF.toList y
null (WrappedMonoFoldable y) = MF.null y
length (WrappedMonoFoldable y) = MF.length y
elem x1 (WrappedMonoFoldable y) = MF.elem x1 y
sum (WrappedMonoFoldable y) = MF.sum y
product (WrappedMonoFoldable y) = MF.product y
wrapMonoFoldable :: (MonoFoldable mono) => mono -> WrappedMonoFoldable mono (Element mono)
wrapMonoFoldable = WrappedMonoFoldable