{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE QuantifiedConstraints #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeFamilyDependencies #-}
{-# LANGUAGE TypeOperators #-}
module Grisette.Unified.Internal.UnifiedAlgReal
( UnifiedAlgReal,
GetAlgReal,
)
where
import Control.Exception (ArithException)
import Control.Monad.Error.Class (MonadError)
import Grisette.Internal.Core.Data.Class.SafeFdiv (FdivOr)
import Grisette.Internal.SymPrim.AlgReal (AlgReal)
import Grisette.Internal.SymPrim.SymAlgReal (SymAlgReal)
import Grisette.Unified.Internal.BaseConstraint
( BasicGrisetteType,
ConSymConversion,
)
import Grisette.Unified.Internal.Class.UnifiedFromIntegral (UnifiedFromIntegral)
import Grisette.Unified.Internal.Class.UnifiedSafeFdiv (UnifiedSafeFdiv)
import Grisette.Unified.Internal.Class.UnifiedSimpleMergeable (UnifiedBranching)
import Grisette.Unified.Internal.EvalModeTag (EvalModeTag (Con, Sym))
import Grisette.Unified.Internal.UnifiedConstraint (UnifiedPrimitive)
import Grisette.Unified.Internal.UnifiedInteger (GetInteger)
class
( BasicGrisetteType (GetAlgReal mode),
ConSymConversion AlgReal SymAlgReal (GetAlgReal mode),
Num (GetAlgReal mode),
Fractional (GetAlgReal mode),
UnifiedPrimitive mode (GetAlgReal mode),
FdivOr (GetAlgReal mode),
forall m.
(UnifiedBranching mode m, MonadError ArithException m) =>
UnifiedSafeFdiv mode ArithException r m,
UnifiedFromIntegral mode (GetInteger mode) r,
r ~ GetAlgReal mode
) =>
UnifiedAlgRealImpl (mode :: EvalModeTag) r
| mode -> r
where
type GetAlgReal mode = real | real -> mode
instance UnifiedAlgRealImpl 'Con AlgReal where
type GetAlgReal 'Con = AlgReal
instance UnifiedAlgRealImpl 'Sym SymAlgReal where
type GetAlgReal 'Sym = SymAlgReal
class
(UnifiedAlgRealImpl mode (GetAlgReal mode)) =>
UnifiedAlgReal (mode :: EvalModeTag)
instance UnifiedAlgReal 'Con
instance UnifiedAlgReal 'Sym