{-# LANGUAGE NoImplicitPrelude #-} module Control.Syntax.DataFlow ((>>=), (>>), (*>), pure, return, (<*>), (<*)) where import Prelude.Linear qualified as PL (>>=) :: a %1 -> (a %1 -> b) %1 -> b a a >>= :: forall a b. a %1 -> (a %1 -> b) %1 -> b >>= a %1 -> b b = a %1 -> b b a a (>>) :: (PL.Consumable a) => a %1 -> b %1 -> b a a >> :: forall a b. Consumable a => a %1 -> b %1 -> b >> b b = a %1 -> () forall a. Consumable a => a %1 -> () PL.consume a a () %1 -> (() %1 -> b) %1 -> b forall a b (p :: Multiplicity) (q :: Multiplicity). a %p -> (a %p -> b) %q -> b PL.& \() -> b b (*>) :: (PL.Consumable a) => a %1 -> b %1 -> b *> :: forall a b. Consumable a => a %1 -> b %1 -> b (*>) = a %1 -> b %1 -> b forall a b. Consumable a => a %1 -> b %1 -> b (>>) (<*) :: (PL.Consumable b) => a %1 -> b %1 -> a a a <* :: forall b a. Consumable b => a %1 -> b %1 -> a <* b b = b %1 -> () forall a. Consumable a => a %1 -> () PL.consume b b () %1 -> (() %1 -> a) %1 -> a forall a b (p :: Multiplicity) (q :: Multiplicity). a %p -> (a %p -> b) %q -> b PL.& \() -> a a pure :: a %1 -> a pure :: forall a. a %1 -> a pure = a %1 -> a forall a (q :: Multiplicity). a %q -> a PL.id return :: a %1 -> a return :: forall a. a %1 -> a return = a %1 -> a forall a (q :: Multiplicity). a %q -> a PL.id (<*>) :: (a %1 -> b) %1 -> a %1 -> b a %1 -> b f <*> :: forall a b. (a %1 -> b) %1 -> a %1 -> b <*> a a = a %1 -> b f a a