{-# LANGUAGE NoImplicitPrelude #-}
module Control.Subcategory.RebindableSyntax
  ( ifThenElse, Eq(..), Num(..)
  , (>>=), (>>), fromLabel, return
  , module Control.Arrow
  ) where
import Control.Subcategory.Applicative
import Control.Subcategory.Bind
import Control.Subcategory.Functor
import Control.Subcategory.Pointed

import Control.Arrow
import GHC.OverloadedLabels
import Prelude              (Bool (..), Eq (..), Num (..))

ifThenElse :: Bool -> a -> a -> a
ifThenElse :: Bool -> a -> a -> a
ifThenElse Bool
True a
t a
_  = a
t
ifThenElse Bool
False a
_ a
f = a
f
{-# INLINE ifThenElse #-}

(>>=) :: (Dom m a, Dom m b, CBind m)
      => m a -> (a -> m b) -> m b
>>= :: m a -> (a -> m b) -> m b
(>>=) = m a -> (a -> m b) -> m b
forall (m :: * -> *) a b.
(CBind m, Dom m a, Dom m b) =>
m a -> (a -> m b) -> m b
(>>-)
{-# INLINE (>>=) #-}

(>>) :: (Dom m a, Dom m b, CApplicative m)
      => m a -> m b -> m b
>> :: m a -> m b -> m b
(>>) = m a -> m b -> m b
forall (f :: * -> *) a b.
(CApplicative f, Dom f a, Dom f b) =>
f a -> f b -> f b
(.>)
{-# INLINE (>>) #-}

return :: (Dom m a, CPointed m) => a -> m a
return :: a -> m a
return = a -> m a
forall (f :: * -> *) a. (CPointed f, Dom f a) => a -> f a
cpure
{-# INLINE return #-}