{-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE NoImplicitPrelude #-} {-# OPTIONS_GHC -fno-warn-tabs #-} module Hcompta.Expr.If where import Control.Monad (Monad(..), when) import Data.Bool import Hcompta.Expr.Dup -- * Class 'Expr_If' class Expr_If repr where default if_ :: Monad repr => repr Bool -> repr a -> repr a -> repr a default when_ :: Monad repr => repr Bool -> repr () -> repr () if_ :: repr Bool -> repr a -> repr a -> repr a if_ m ok ko = do m' <- m if m' then ok else ko when_ :: repr Bool -> repr () -> repr () when_ m ok = do m' <- m when m' ok instance -- Expr_If Dup ( Expr_If r1 , Expr_If r2 ) => Expr_If (Dup r1 r2) where if_ (c1 `Dup` c2) (ok1 `Dup` ok2) (ko1 `Dup` ko2) = if_ c1 ok1 ko1 `Dup` if_ c2 ok2 ko2 when_ (c1 `Dup` c2) (ok1 `Dup` ok2) = when_ c1 ok1 `Dup` when_ c2 ok2