{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE DataKinds #-}
module ReWire
( module RWC.Primitives
, error, externWithSig, extern
, put, get, modify
, signal, lift, extrude
, natVal, length, len, fromList
, Bit, W
) where
import RWC.Primitives
import Prelude (String, Integer, Bool)
type Bit = Bool
type W n = Vec n Bit
{-# INLINE error #-}
error :: String -> a
error :: forall a. String -> a
error = String -> a
forall a. String -> a
rwPrimError
{-# INLINE externWithSig #-}
externWithSig :: [(String, Integer)]
-> String
-> String
-> [(String, Integer)]
-> [(String, Integer)]
-> String
-> a
-> String
-> a
externWithSig :: forall a.
[(String, Integer)]
-> String
-> String
-> [(String, Integer)]
-> [(String, Integer)]
-> String
-> a
-> String
-> a
externWithSig = [(String, Integer)]
-> String
-> String
-> [(String, Integer)]
-> [(String, Integer)]
-> String
-> a
-> String
-> a
forall a.
[(String, Integer)]
-> String
-> String
-> [(String, Integer)]
-> [(String, Integer)]
-> String
-> a
-> String
-> a
rwPrimExtern
{-# INLINE extern #-}
extern :: String -> a -> a
extern :: forall a. String -> a -> a
extern String
n a
a = [(String, Integer)]
-> String
-> String
-> [(String, Integer)]
-> [(String, Integer)]
-> String
-> a
-> String
-> a
forall a.
[(String, Integer)]
-> String
-> String
-> [(String, Integer)]
-> [(String, Integer)]
-> String
-> a
-> String
-> a
externWithSig [] String
"" String
"" [] [] String
n a
a String
""
{-# INLINE put #-}
put :: Monad m => s -> StateT s m ()
put :: forall (m :: * -> *) s. Monad m => s -> StateT s m ()
put = s -> StateT s m ()
forall (m :: * -> *) s. Monad m => s -> StateT s m ()
rwPrimPut
{-# INLINE get #-}
get :: Monad m => StateT s m s
get :: forall (m :: * -> *) s. Monad m => StateT s m s
get = StateT s m s
forall (m :: * -> *) s. Monad m => StateT s m s
rwPrimGet
{-# INLINE modify #-}
modify :: Monad m => (s -> s) -> StateT s m ()
modify :: forall (m :: * -> *) s. Monad m => (s -> s) -> StateT s m ()
modify s -> s
f = StateT s m s
forall (m :: * -> *) s. Monad m => StateT s m s
get StateT s m s -> (s -> StateT s m ()) -> StateT s m ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
`rwPrimBind` (\ s
x -> s -> StateT s m ()
forall (m :: * -> *) s. Monad m => s -> StateT s m ()
put (s -> s
f s
x))
{-# INLINE signal #-}
signal :: Monad m => o -> ReacT i o m i
signal :: forall (m :: * -> *) o i. Monad m => o -> ReacT i o m i
signal = o -> ReacT i o m i
forall (m :: * -> *) o i. Monad m => o -> ReacT i o m i
rwPrimSignal
{-# INLINE lift #-}
lift :: (MonadTrans t, Monad m) => m a -> t m a
lift :: forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift = m a -> t m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
rwPrimLift
{-# INLINE extrude #-}
extrude :: Monad m => ReacT i o (StateT s m) a -> s -> ReacT i o m a
extrude :: forall (m :: * -> *) i o s a.
Monad m =>
ReacT i o (StateT s m) a -> s -> ReacT i o m a
extrude = ReacT i o (StateT s m) a -> s -> ReacT i o m a
forall (m :: * -> *) i o s a.
Monad m =>
ReacT i o (StateT s m) a -> s -> ReacT i o m a
rwPrimExtrude
{-# INLINE natVal #-}
natVal :: KnownNat n => Proxy n -> Integer
natVal :: forall (n :: Nat). KnownNat n => Proxy n -> Integer
natVal = Proxy n -> Integer
forall (n :: Nat). KnownNat n => Proxy n -> Integer
rwPrimNatVal
{-# INLINE length #-}
length :: Vec n a -> Proxy n
length :: forall (n :: Nat) a. Vec n a -> Proxy n
length Vec n a
_ = Proxy n
forall (n :: Nat). Proxy n
Proxy
{-# INLINE len #-}
len :: KnownNat n => Vec n a -> Integer
len :: forall (n :: Nat) a. KnownNat n => Vec n a -> Integer
len Vec n a
v = Proxy n -> Integer
forall (n :: Nat). KnownNat n => Proxy n -> Integer
natVal (Vec n a -> Proxy n
forall (n :: Nat) a. Vec n a -> Proxy n
length Vec n a
v)
{-# INLINE fromList #-}
fromList :: KnownNat n => [a] -> Vec n a
fromList :: forall (n :: Nat) a. KnownNat n => [a] -> Vec n a
fromList = [a] -> Vec n a
forall (n :: Nat) a. KnownNat n => [a] -> Vec n a
rwPrimVecFromList