packages feed

sbv-14.0: SBVTestSuite/TestSuite/CompileTests/SCase/SCase99.hs

{-# LANGUAGE QuasiQuotes #-}

{-# OPTIONS_GHC -Wall -Werror -ddump-splices #-}

-- Positive: Deep nesting (4 levels). Outer Expr, inner Maybe, inner Either, innermost Bool.
module T where

import Expr
import Data.SBV

t :: SExpr -> SMaybe (Either Integer Bool) -> SBool -> SInteger
t e m b = [sCase| e of
                  Zero      -> case m of
                                 Nothing -> 0
                                 Just v  -> case v of
                                              Left x  -> case b of
                                                           True  -> x
                                                           False -> -x
                                              Right _ -> 1
                  Num k     -> k
                  Var _     -> -1
                  Add a _   -> t a m b
                  Let _ _ c -> t c m b
         |]