{-# OPTIONS -fplugin=Rattus.Plugin #-}
module Rattus (
module Rattus.Primitives,
module Rattus.Strict,
Rattus(..),
(|#|),
(|##),
(<#>),
(<##),
box'
)
where
import Rattus.Plugin
import Rattus.Strict
import Rattus.Primitives
{-# ANN module Rattus #-}
{-# INLINE (<#>) #-}
(<#>) :: O (a -> b) -> O a -> O b
O (a -> b)
f <#> :: O (a -> b) -> O a -> O b
<#> O a
x = b -> O b
forall a. a -> O a
delay (O (a -> b) -> a -> b
forall a. O a -> a
adv O (a -> b)
f (O a -> a
forall a. O a -> a
adv O a
x))
{-# INLINE (<##) #-}
(<##) :: Stable a => O (a -> b) -> a -> O b
O (a -> b)
f <## :: O (a -> b) -> a -> O b
<## a
x = b -> O b
forall a. a -> O a
delay (O (a -> b) -> a -> b
forall a. O a -> a
adv O (a -> b)
f a
x)
{-# INLINE (|#|) #-}
(|#|) :: Box (a -> b) -> Box a -> Box b
Box (a -> b)
f |#| :: Box (a -> b) -> Box a -> Box b
|#| Box a
x = b -> Box b
forall a. a -> Box a
box (Box (a -> b) -> a -> b
forall a. Box a -> a
unbox Box (a -> b)
f (Box a -> a
forall a. Box a -> a
unbox Box a
x))
{-# INLINE (|##) #-}
(|##) :: Stable a => Box (a -> b) -> a -> Box b
Box (a -> b)
f |## :: Box (a -> b) -> a -> Box b
|## a
x = b -> Box b
forall a. a -> Box a
box (Box (a -> b) -> a -> b
forall a. Box a -> a
unbox Box (a -> b)
f a
x)
box' :: Stable a => a -> Box a
box' :: a -> Box a
box' a
x = a -> Box a
forall a. a -> Box a
box a
x