{-# OPTIONS_HADDOCK hide #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE LinearTypes #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE QuantifiedConstraints #-}
{-# LANGUAGE RebindableSyntax #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TupleSections #-}
module Control.Functor.Linear.Internal.Class
(
Functor(..)
, dataFmapDefault
, (<$>)
, (<&>)
, (<$)
, Applicative(..)
, dataPureDefault
, Monad(..)
, MonadFail(..)
, return
, join
, ap
, foldM
) where
import Prelude (String)
import Prelude.Linear.Internal
import qualified Control.Monad as NonLinear ()
import qualified Data.Functor.Linear.Internal.Functor as Data
import qualified Data.Functor.Linear.Internal.Applicative as Data
import Data.Unrestricted.Internal.Consumable
class Data.Functor f => Functor f where
fmap :: (a %1-> b) %1-> f a %1-> f b
dataFmapDefault :: Functor f => (a %1-> b) -> f a %1-> f b
dataFmapDefault :: forall (f :: * -> *) a b. Functor f => (a %1 -> b) -> f a %1 -> f b
dataFmapDefault a %1 -> b
f = (a %1 -> b) %1 -> f a %1 -> f b
forall (f :: * -> *) a b.
Functor f =>
(a %1 -> b) %1 -> f a %1 -> f b
fmap a %1 -> b
f
(<$>) :: Functor f => (a %1-> b) %1-> f a %1-> f b
<$> :: forall (f :: * -> *) a b.
Functor f =>
(a %1 -> b) %1 -> f a %1 -> f b
(<$>) = (a %1 -> b) %1 -> f a %1 -> f b
forall (f :: * -> *) a b.
Functor f =>
(a %1 -> b) %1 -> f a %1 -> f b
fmap
{-# INLINE (<$>) #-}
(<&>) :: Functor f => f a %1-> (a %1-> b) %1-> f b
<&> :: forall (f :: * -> *) a b.
Functor f =>
f a %1 -> (a %1 -> b) %1 -> f b
(<&>) f a
a a %1 -> b
f = a %1 -> b
f (a %1 -> b) %1 -> f a %1 -> f b
forall (f :: * -> *) a b.
Functor f =>
(a %1 -> b) %1 -> f a %1 -> f b
<$> f a
a
{-# INLINE (<&>) #-}
(<$) :: (Functor f, Consumable b) => a %1-> f b %1-> f a
a
a <$ :: forall (f :: * -> *) b a.
(Functor f, Consumable b) =>
a %1 -> f b %1 -> f a
<$ f b
fb = (b %1 -> a) %1 -> f b %1 -> f a
forall (f :: * -> *) a b.
Functor f =>
(a %1 -> b) %1 -> f a %1 -> f b
fmap (b %1 -> a %1 -> a
forall a b. Consumable a => a %1 -> b %1 -> b
`lseq` a
a) f b
fb
class (Data.Applicative f, Functor f) => Applicative f where
{-# MINIMAL pure, ((<*>) | liftA2) #-}
pure :: a %1-> f a
(<*>) :: f (a %1-> b) %1-> f a %1-> f b
(<*>) = ((a %1 -> b) %1 -> a %1 -> b)
%1 -> f (a %1 -> b) %1 -> f a %1 -> f b
forall (f :: * -> *) a b c.
Applicative f =>
(a %1 -> b %1 -> c) %1 -> f a %1 -> f b %1 -> f c
liftA2 (a %1 -> b) %1 -> a %1 -> b
forall a. a %1 -> a
id
liftA2 :: (a %1-> b %1-> c) %1-> f a %1-> f b %1-> f c
liftA2 a %1 -> b %1 -> c
f f a
x f b
y = a %1 -> b %1 -> c
f (a %1 -> b %1 -> c) %1 -> f a %1 -> f (b %1 -> c)
forall (f :: * -> *) a b.
Functor f =>
(a %1 -> b) %1 -> f a %1 -> f b
<$> f a
x f (b %1 -> c) %1 -> f b %1 -> f c
forall (f :: * -> *) a b.
Applicative f =>
f (a %1 -> b) %1 -> f a %1 -> f b
<*> f b
y
dataPureDefault :: Applicative f => a -> f a
dataPureDefault :: forall (f :: * -> *) a. Applicative f => a -> f a
dataPureDefault a
x = a %1 -> f a
forall (f :: * -> *) a. Applicative f => a %1 -> f a
pure a
x
class Applicative m => Monad m where
{-# MINIMAL (>>=) #-}
(>>=) :: m a %1-> (a %1-> m b) %1-> m b
(>>) :: m () %1-> m a %1-> m a
m ()
m >> m a
k = m ()
m m () %1 -> (() %1 -> m a) %1 -> m a
forall (m :: * -> *) a b.
Monad m =>
m a %1 -> (a %1 -> m b) %1 -> m b
>>= (\() -> m a
k)
class Monad m => MonadFail m where
fail :: String -> m a
return :: Monad m => a %1-> m a
return :: forall (m :: * -> *) a. Monad m => a %1 -> m a
return a
x = a %1 -> m a
forall (f :: * -> *) a. Applicative f => a %1 -> f a
pure a
x
{-# INLINE return #-}
join :: Monad m => m (m a) %1-> m a
join :: forall (m :: * -> *) a. Monad m => m (m a) %1 -> m a
join m (m a)
action = m (m a)
action m (m a) %1 -> (m a %1 -> m a) %1 -> m a
forall (m :: * -> *) a b.
Monad m =>
m a %1 -> (a %1 -> m b) %1 -> m b
>>= m a %1 -> m a
forall a. a %1 -> a
id
ap :: Monad m => m (a %1-> b) %1-> m a %1-> m b
ap :: forall (m :: * -> *) a b.
Monad m =>
m (a %1 -> b) %1 -> m a %1 -> m b
ap m (a %1 -> b)
f m a
x = m (a %1 -> b)
f m (a %1 -> b) %1 -> ((a %1 -> b) %1 -> m b) %1 -> m b
forall (m :: * -> *) a b.
Monad m =>
m a %1 -> (a %1 -> m b) %1 -> m b
>>= (\a %1 -> b
f' -> (a %1 -> b) %1 -> m a %1 -> m b
forall (f :: * -> *) a b.
Functor f =>
(a %1 -> b) %1 -> f a %1 -> f b
fmap a %1 -> b
f' m a
x)
foldM :: forall m a b. Monad m => (b %1-> a %1-> m b) -> b %1-> [a] %1-> m b
foldM :: forall (m :: * -> *) a b.
Monad m =>
(b %1 -> a %1 -> m b) -> b %1 -> [a] %1 -> m b
foldM b %1 -> a %1 -> m b
_ b
i [] = b %1 -> m b
forall (m :: * -> *) a. Monad m => a %1 -> m a
return b
i
foldM b %1 -> a %1 -> m b
f b
i (a
x:[a]
xs) = b %1 -> a %1 -> m b
f b
i a
x m b %1 -> (b %1 -> m b) %1 -> m b
forall (m :: * -> *) a b.
Monad m =>
m a %1 -> (a %1 -> m b) %1 -> m b
>>= \b
i' -> (b %1 -> a %1 -> m b) -> b %1 -> [a] %1 -> m b
forall (m :: * -> *) a b.
Monad m =>
(b %1 -> a %1 -> m b) -> b %1 -> [a] %1 -> m b
foldM b %1 -> a %1 -> m b
f b
i' [a]
xs