{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeFamilyDependencies #-}
module Grisette.Unified.Internal.UnifiedBool (UnifiedBool (..)) where
import Grisette.Internal.Core.Data.Class.LogicalOp (LogicalOp)
import Grisette.Internal.SymPrim.SymBool (SymBool)
import Grisette.Unified.Internal.BaseConstraint
( BasicGrisetteType,
ConSymConversion,
)
import Grisette.Unified.Internal.EvalModeTag (EvalModeTag (Con, Sym))
class
( BasicGrisetteType (GetBool mode),
ConSymConversion Bool SymBool (GetBool mode),
LogicalOp (GetBool mode)
) =>
UnifiedBool (mode :: EvalModeTag)
where
type GetBool mode = bool | bool -> mode
instance UnifiedBool 'Con where
type GetBool 'Con = Bool
instance UnifiedBool 'Sym where
type GetBool 'Sym = SymBool