{-# LANGUAGE PackageImports #-}

module Network.Spata.Type where

import Data.DList (DList)
import "mtl" Control.Monad.Writer

type Assoc = [(String, String)]
type Guard = String -> Assoc -> Either String Assoc

-- type Guards = [String] -> Assoc -> Either String Assoc
type Task = Assoc -> Either String Assoc

type GuardiansT a = Writer (DList Task) a
type Guardians = GuardiansT ()

type GuardM m = String -> Assoc -> m (Either String Assoc)
type TaskM m = Assoc -> m (Either String Assoc)
type GuardiansTM a m = Writer (DList (TaskM m)) a
type GuardiansM m = GuardiansTM () m