fused-effects-0.1.0.0: src/Control/Effect/NonDet/Internal.hs
{-# LANGUAGE DeriveFunctor, KindSignatures #-}
module Control.Effect.NonDet.Internal
( NonDet(..)
) where
import Control.Effect.Carrier
import Data.Coerce
data NonDet (m :: * -> *) k
= Empty
| Choose (Bool -> k)
deriving (Functor)
instance HFunctor NonDet where
hmap _ = coerce
{-# INLINE hmap #-}
instance Effect NonDet where
handle _ _ Empty = Empty
handle state handler (Choose k) = Choose (handler . (<$ state) . k)