-- Copyright © 2011 National Institute of Aerospace / Galois, Inc. {-# LANGUAGE Safe #-} -- | Pick values from one of two streams, depending whether a condition is true -- or false. module Copilot.Language.Operators.Mux ( mux , ifThenElse ) where import Copilot.Core (Typed, typeOf) import qualified Copilot.Core as Core import Copilot.Language.Prelude import Copilot.Language.Stream import Prelude () -- | Convenient synonym for 'ifThenElse'. mux :: Typed a => Stream Bool -> Stream a -> Stream a -> Stream a mux (Const True) t _ = t mux (Const False) _ f = f mux b t f = Op3 (Core.Mux typeOf) b t f -- | If-then-else applied point-wise to three streams (a condition stream, a -- then-branch stream, and an else-branch stream). -- -- Produce a stream that, at any point in time, if the value of the first -- stream at that point is true, contains the value in the second stream at -- that time, otherwise it contains the value in the third stream. ifThenElse :: Typed a => Stream Bool -> Stream a -> Stream a -> Stream a ifThenElse = mux