module Lava.SignalTry where import Lava.Ref data Signal a = Value a | Symbol (Ref (Symbol a)) data Symbol a = forall x y . Function String ([x] -> [y] -> a) [Signal x] [Signal y] | Delay (Signal a) (Signal a) | Variable String and2 :: (Signal Bool, Signal Bool) -> Signal Bool and2 :: (Signal Bool, Signal Bool) -> Signal Bool and2 (x :: Signal Bool x,y :: Signal Bool y) = Ref (Symbol Bool) -> Signal Bool forall a. Ref (Symbol a) -> Signal a Symbol (Symbol Bool -> Ref (Symbol Bool) forall a. a -> Ref a ref (String -> ([Bool] -> [Any] -> Bool) -> [Signal Bool] -> [Signal Any] -> Symbol Bool forall a x y. String -> ([x] -> [y] -> a) -> [Signal x] -> [Signal y] -> Symbol a Function "and" (\xs :: [Bool] xs _ -> [Bool] -> Bool forall (t :: * -> *). Foldable t => t Bool -> Bool and [Bool] xs) [Signal Bool x,Signal Bool y] []))