packages feed

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

{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE TypeFamilies #-}

module Language.Spectacle.Syntax.Logic.Internal
  ( Logic (Logic),
    Effect (Complement, Conjunct, Disjunct),
  )
where

import Data.Void (Void)

import Language.Spectacle.Lang (Effect, EffectK, ScopeK)

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

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

data instance Effect Logic :: ScopeK where
  Complement :: m Bool -> Effect Logic m Bool
  Conjunct :: m Bool -> m Bool -> Effect Logic m Bool
  Disjunct :: m Bool -> m Bool -> Effect Logic m Bool