Safe Haskell | Safe |
---|---|
Language | Haskell98 |
Synopsis
- type Variable s a = Variable IdentityT s a
- globalVariable :: C s => s (Variable s a)
- type T = T IdentityT
- localVariable :: C s => T s (Variable s a)
- constant :: C s => a -> T s (Variable s a)
- assignment2 :: (C w, C s) => (a -> b) -> Variable w s a -> Variable w s b -> T w s ()
- assignment3 :: (C w, C s) => (a -> b -> c) -> Variable w s a -> Variable w s b -> Variable w s c -> T w s ()
- data Apply w s a
- arg :: Variable w s a -> Apply w s a
- runApply :: (C w, C s) => Apply w s a -> Variable w s a -> T w s ()
- solve :: C s => T s a -> s a
- query :: C s => Variable s a -> s (Maybe a)
Preparation
globalVariable :: C s => s (Variable s a) Source #
Posing statements
assignment2 :: (C w, C s) => (a -> b) -> Variable w s a -> Variable w s b -> T w s () Source #
assignment2 f a b = runApply (f <$> arg a) b
assignment3 :: (C w, C s) => (a -> b -> c) -> Variable w s a -> Variable w s b -> Variable w s c -> T w s () Source #
assignment3 f a b c = runApply (liftA2 f (arg a) (arg b)) c
arg :: Variable w s a -> Apply w s a Source #
This function allows to generalize assignment2
and assignment3
to more arguments.
You could achieve the same with nested applications of assignment3 (,)
.