{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE RankNTypes #-}
module Copilot.Verifier.FloatMode
( FloatMode(..)
, withFloatMode
, withInterpretedFloatExprBuilder
) where
import qualified What4.Expr.Builder as W4
import qualified What4.InterpretedFloatingPoint as W4
data FloatMode
=
FloatUninterpreted
|
FloatIEEE
deriving Int -> FloatMode -> ShowS
[FloatMode] -> ShowS
FloatMode -> String
(Int -> FloatMode -> ShowS)
-> (FloatMode -> String)
-> ([FloatMode] -> ShowS)
-> Show FloatMode
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> FloatMode -> ShowS
showsPrec :: Int -> FloatMode -> ShowS
$cshow :: FloatMode -> String
show :: FloatMode -> String
$cshowList :: [FloatMode] -> ShowS
showList :: [FloatMode] -> ShowS
Show
withFloatMode ::
FloatMode ->
(forall fm. W4.FloatModeRepr fm -> r) ->
r
withFloatMode :: forall r.
FloatMode -> (forall (fm :: FloatMode). FloatModeRepr fm -> r) -> r
withFloatMode FloatMode
fm forall (fm :: FloatMode). FloatModeRepr fm -> r
k =
case FloatMode
fm of
FloatMode
FloatUninterpreted ->
FloatModeRepr 'FloatUninterpreted -> r
forall (fm :: FloatMode). FloatModeRepr fm -> r
k FloatModeRepr 'FloatUninterpreted
W4.FloatUninterpretedRepr
FloatMode
FloatIEEE ->
FloatModeRepr 'FloatIEEE -> r
forall (fm :: FloatMode). FloatModeRepr fm -> r
k FloatModeRepr 'FloatIEEE
W4.FloatIEEERepr
withInterpretedFloatExprBuilder ::
W4.ExprBuilder t st (W4.Flags fm) ->
W4.FloatModeRepr fm ->
(W4.IsInterpretedFloatExprBuilder (W4.ExprBuilder t st (W4.Flags fm)) => r) ->
r
withInterpretedFloatExprBuilder :: forall t (st :: * -> *) (fm :: FloatMode) r.
ExprBuilder t st (Flags fm)
-> FloatModeRepr fm
-> (IsInterpretedFloatExprBuilder (ExprBuilder t st (Flags fm)) =>
r)
-> r
withInterpretedFloatExprBuilder ExprBuilder t st (Flags fm)
_sym FloatModeRepr fm
fm IsInterpretedFloatExprBuilder (ExprBuilder t st (Flags fm)) => r
k =
case FloatModeRepr fm
fm of
FloatModeRepr fm
W4.FloatUninterpretedRepr -> r
IsInterpretedFloatExprBuilder (ExprBuilder t st (Flags fm)) => r
k
FloatModeRepr fm
W4.FloatIEEERepr -> r
IsInterpretedFloatExprBuilder (ExprBuilder t st (Flags fm)) => r
k
FloatModeRepr fm
W4.FloatRealRepr -> r
IsInterpretedFloatExprBuilder (ExprBuilder t st (Flags fm)) => r
k