monad-choice-0.1.0.0: src/Control/Monad/Choice/Invariant.hs
{-# LANGUAGE RankNTypes #-}
{-|
Module : Control.Monad.Choice.Invariant
Copyright : (c) Eamon Olive, 2020
(c) Louis Hyde, 2020
License : AGPL-3
Maintainer : ejolive97@gmail.com
Stability : experimental
-}
module Control.Monad.Choice.Invariant
( Choice
, runChoice
) where
-- Internal imports
import Control.Monad.Trans.Choice.Invariant
( ChoiceT
, runChoiceT
)
-- External imports
import Data.Functor.Identity
( Identity
( runIdentity
)
)
type Choice f a = ChoiceT f Identity a
runChoice ::
(forall x . f x -> x)
-> Choice f a
-> a
runChoice chooser = runIdentity . runChoiceT (\options -> pure $ chooser options)