packages feed

pure-borrow-0.0.0.0: src/Control/Syntax/DataFlow.hs

{-# LANGUAGE NoImplicitPrelude #-}

module Control.Syntax.DataFlow ((>>=), (>>), (*>), pure, return, (<*>), (<*)) where

import Prelude.Linear qualified as PL

(>>=) :: a %1 -> (a %1 -> b) %1 -> b
a >>= b = b a

(>>) :: (PL.Consumable a) => a %1 -> b %1 -> b
a >> b = PL.consume a PL.& \() -> b

(*>) :: (PL.Consumable a) => a %1 -> b %1 -> b
(*>) = (>>)

(<*) :: (PL.Consumable b) => a %1 -> b %1 -> a
a <* b = PL.consume b PL.& \() -> a

pure :: a %1 -> a
pure = PL.id

return :: a %1 -> a
return = PL.id

(<*>) :: (a %1 -> b) %1 -> a %1 -> b
f <*> a = f a