Add MonadUnify instance for the state monad.

This commit is contained in:
Danila Fedorin 2023-03-04 14:24:52 -08:00
parent d1e227dbed
commit 1f93dc1745
1 changed files with 8 additions and 0 deletions

View File

@ -5,6 +5,8 @@ import Prelude (Unit, unit, ($))
import Control.Applicative (pure) import Control.Applicative (pure)
import Control.Bind (bind) import Control.Bind (bind)
import Control.MonadPlus (class MonadPlus, empty) import Control.MonadPlus (class MonadPlus, empty)
import Control.Monad.State.Trans (StateT)
import Control.Monad.Trans.Class (lift)
import Data.Traversable (class Traversable, traverse) import Data.Traversable (class Traversable, traverse)
import Data.Tuple (Tuple(..)) import Data.Tuple (Tuple(..))
import Data.Lazy (Lazy, force) import Data.Lazy (Lazy, force)
@ -43,3 +45,9 @@ unify f1 f2 =
process (Merge k1 k2) = merge k1 k2 process (Merge k1 k2) = merge k1 k2
process (Store k f) = store k f process (Store k f) = store k f
process Fail = empty process Fail = empty
instance MonadUnify k f m => MonadUnify k f (StateT s m) where
fresh = lift fresh
merge m k = lift $ merge m k
store k f = lift $ store k f
reify f = lift $ reify f