logict-sequence-0.2: src/Control/Monad/Logic/Sequence/Compat.hs
{-# LANGUAGE CPP #-}
{-# LANGUAGE ViewPatterns #-}
module Control.Monad.Logic.Sequence.Compat
( fromSeqT
, toLogicT
, fromLogicT
, observeT
, observe ) where
import Control.Monad.Identity (Identity(..))
import Control.Monad.Logic.Sequence.Internal hiding ( observeT, observe )
#if !MIN_VERSION_base(4,13,0)
observeT :: Monad m => SeqT m a -> m a
#else
observeT :: MonadFail m => SeqT m a -> m a
#endif
observeT (toViewT -> m) = m >>= go where
go (a :< _) = return a
go Empty = fail "No results."
{-# INLINE observeT #-}
observe :: Seq a -> a
observe (toViewT -> m) = case runIdentity m of
a :< _ -> a
Empty -> error "No results."
{-# INLINE observe #-}