module Fold.Shortcut.Run where
import Fold.Shortcut.Type
run :: ShortcutFold a b -> [a] -> b
run :: forall a b. ShortcutFold a b -> [a] -> b
run ShortcutFold{ Vitality x y
initial :: ()
initial :: Vitality x y
initial, y -> a -> Vitality x y
step :: ()
step :: y -> a -> Vitality x y
step, Vitality x y -> b
extract :: ()
extract :: Vitality x y -> b
extract } = Vitality x y -> [a] -> b
go Vitality x y
initial
where
go :: Vitality x y -> [a] -> b
go (Alive Will
Tenacious y
x) (a
a : [a]
as) = Vitality x y -> [a] -> b
go (y -> a -> Vitality x y
step y
x a
a) [a]
as
go Vitality x y
v [a]
_ = Vitality x y -> b
extract Vitality x y
v