Usually, as is done in Haskell, parameterization is by character type. Thus, your example will be as follows:
data Proposition a =
Primitive a |
Negated (Proposition a) |
Implication (Proposition a) (Proposition a)
, . LISP: , , , , , , , . , Functor Monad.
(=<<) :: (a -> Proposition b) -> Proposition a -> Proposition b
^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^
substitute each free var with an expression in this expression
:
implyOpen :: Proposition a -> Proposition b -> Proposition (Either a b)
implyOpen p q = Implication (Left <$> p) (Right <$> q)
.
data Proposition a =
... |
ForAll (Proposition (Maybe a))
" " - Primitive Nothing - , . , , , .
bound - ( ).