{-# LANGUAGE OverloadedLists #-} {-# LANGUAGE QuasiQuotes #-} -- | Boolean functions, like in "Data.Bool". -- -- This module should be imported qualified to avoid clashes with standard -- Haskell definitions. module Stg.Prelude.Bool ( and2, or2, not, bool, eq_Bool, ) where import Prelude () import Stg.Language import Stg.Parser.QuasiQuoter eq_Bool, and2, or2, not, bool :: Program -- | Boolean equality. eq_Bool = [program| eq_Bool = \x y -> case x of True -> case y of True -> True; False -> False; badBool -> Error_eq_Bool badBool; False -> case y of True -> False; False -> True; badBool -> Error_eq_Bool badBool; badBool -> Error_eq_Bool badBool |] -- | Binary and. Haskell's @(&&)@. -- -- @ -- && : Bool -> Bool -> Bool -- @ and2 = [program| and2 = \x y -> case x of True -> y; False -> False; badBool -> Error_and2 badBool |] -- | Binary or. Haskell's @(||)@. -- -- @ -- || : Bool -> Bool -> Bool -- @ or2 = [program| or2 = \x y -> case x of True -> True; False -> y; badBool -> Error_or2 badBool |] -- | Binary negation. -- -- @ -- not : Bool -> Bool -- @ not = [program| not = \x -> case x of True -> False; False -> True; badBool -> Error_not badBool |] -- | Boolean deconstructor. -- -- @ -- bool f _ False = f -- bool _ t True = t -- @ -- -- @ -- bool : a -> a -> Bool -> a -- @ bool = [program| bool = \f t p -> case p of True -> t; False -> f; badBool -> Error_bool badBool |]