hoop-0.3.0.0: src/Language/MSH.hs
{-# LANGUAGE RankNTypes, MultiParamTypeClasses, FunctionalDependencies, FlexibleContexts #-}
{-# LANGUAGE TypeFamilies, DataKinds, KindSignatures, FlexibleInstances, DefaultSignatures #-}
module Language.MSH (
module Control.Lens,
module Control.Monad.Identity,
module Control.Monad.State,
module Language.MSH.QuasiQuoters,
module Language.MSH.Selectors,
module Language.MSH.RuntimeError,
SetterContext(..),
ValueContext(..),
HasData(..),
Cast(..),
New(..),
Void,
switch,
(<:),
Identity(..)
) where
import Control.Lens
import Control.Monad.Identity
import Control.Monad.State hiding (state)
import Control.Monad.Fail
import Language.MSH.QuasiQuoters
import Language.MSH.Selectors
import Language.MSH.RuntimeError
class HasData obj d | obj -> d where
extractData :: obj -> d
class Cast sub sup | sub -> sup where
upcast :: sub -> sup
class New obj where
type Args obj :: *
new :: Args obj -> obj
type Void = ()
infixl 7 <:
class SetterContext r o s m where
(>:) :: Selector Field o s m val -> val -> r
class ValueContext r val where
type VCSt r :: *
type VCM r :: * -> *
--value :: Selector o (VCSt r) (VCM r) arg val -> r
{-instance SetterContext (StateT s m ()) o s m where
(MkField g g' s s') <: v = s' v-}
instance ValueContext (StateT s m val) val where
type VCSt (StateT s m val) = s
type VCM (StateT s m val) = m
--value (MkField g g' s s') = g'
(<:) :: Monad m => Selector Field o s m val -> val -> StateT s m ()
(MkField g g' s s') <: v = s' v
switch :: Monad m => Selector ty o s m val -> (val -> StateT s m b) -> StateT s m b
switch (MkMethod im em) m = im >>= m
switch (MkField eg ig es is) m = ig >>= m
instance MonadFail Identity where
fail = error