packages feed

spectacle-1.0.0: src/Language/Spectacle/Syntax/Env/Internal.hs

{-# LANGUAGE TypeFamilies #-}

module Language.Spectacle.Syntax.Env.Internal
  ( Env (Env),
    Effect (Get, Put),
  )
where

import Data.Void (Void)

import Language.Spectacle.Lang (Effect, EffectK)
import Language.Spectacle.RTS.Registers (RuntimeState)

-- ---------------------------------------------------------------------------------------------------------------------

newtype Env :: EffectK where
  Env :: Void -> Env a

data instance Effect Env m a where
  Get :: m ~ f ctx effs => Effect Env m (RuntimeState ctx)
  Put :: m ~ f ctx effs => RuntimeState ctx -> Effect Env m ()