module Fold.Nonempty.Conversion where
import Fold.Nonempty.Type
import Fold.Effectful.Type (EffectfulFold)
import Fold.Pure.Type (Fold (Fold))
import qualified Fold.Pure.Type as Fold
import qualified Fold.Pure.Conversion as Fold.Conversion
import Data.Functor.Identity (Identity)
fold :: Fold a b -> NonemptyFold a b
fold :: forall a b. Fold a b -> NonemptyFold a b
fold Fold{ x
initial :: ()
initial :: x
Fold.initial, x -> a -> x
step :: ()
step :: x -> a -> x
Fold.step, x -> b
extract :: ()
extract :: x -> b
Fold.extract } =
NonemptyFold{ initial :: a -> x
initial = x -> a -> x
step x
initial, x -> a -> x
step :: x -> a -> x
step :: x -> a -> x
step, x -> b
extract :: x -> b
extract :: x -> b
extract }
effectfulFold :: EffectfulFold Identity a b -> NonemptyFold a b
effectfulFold :: forall a b. EffectfulFold Identity a b -> NonemptyFold a b
effectfulFold EffectfulFold Identity a b
x = forall a b. Fold a b -> NonemptyFold a b
fold (forall a b. EffectfulFold Identity a b -> Fold a b
Fold.Conversion.effectfulFold EffectfulFold Identity a b
x)