packages feed

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

{-# LANGUAGE TypeFamilies #-}

module Language.Spectacle.Syntax.NonDet.Internal
  ( NonDet (Empty, Choose),
    Effect (MSplit),
  )
where

import Language.Spectacle.Lang.Member (Member)
import Language.Spectacle.Lang.Scoped (Effect)

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

data NonDet a where
  Empty :: NonDet a
  Choose :: NonDet Bool

data instance Effect NonDet m a where
  MSplit :: (m ~ f ctx effs, Member NonDet effs) => m a -> Effect NonDet m (Maybe (m a, m a))