{-# LANGUAGE Arrows #-}
module FRP.Yampa.LTLPast where
import FRP.Yampa
andSF :: SF (Bool, Bool) Bool
andSF :: SF (Bool, Bool) Bool
andSF = forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Bool -> Bool -> Bool
(&&))
orSF :: SF (Bool, Bool) Bool
orSF :: SF (Bool, Bool) Bool
orSF = forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr (forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry Bool -> Bool -> Bool
(||))
notSF :: SF Bool Bool
notSF :: SF Bool Bool
notSF = forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr Bool -> Bool
not
impliesSF :: SF (Bool, Bool) Bool
impliesSF :: SF (Bool, Bool) Bool
impliesSF = forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr forall a b. (a -> b) -> a -> b
$ \(Bool
i,Bool
p) -> Bool -> Bool
not Bool
i Bool -> Bool -> Bool
|| Bool
p
sofarSF :: SF Bool Bool
sofarSF :: SF Bool Bool
sofarSF = forall c a b. c -> SF (a, c) (b, c) -> SF a b
loopPre Bool
True forall a b. (a -> b) -> a -> b
$ forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr forall a b. (a -> b) -> a -> b
$ \(Bool
n,Bool
o) -> let n' :: Bool
n' = Bool
o Bool -> Bool -> Bool
&& Bool
n in (Bool
n', Bool
n')
everSF :: SF Bool Bool
everSF :: SF Bool Bool
everSF = forall c a b. c -> SF (a, c) (b, c) -> SF a b
loopPre Bool
False forall a b. (a -> b) -> a -> b
$ forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr forall a b. (a -> b) -> a -> b
$ \(Bool
n,Bool
o) -> let n' :: Bool
n' = Bool
o Bool -> Bool -> Bool
|| Bool
n in (Bool
n', Bool
n')
lastSF :: SF Bool Bool
lastSF :: SF Bool Bool
lastSF = forall a. a -> SF a a
iPre Bool
False
untilSF :: SF (Bool, Bool) Bool
untilSF :: SF (Bool, Bool) Bool
untilSF = forall a b c. SF a (b, Event c) -> (c -> SF a b) -> SF a b
switch
(forall c a b. c -> SF (a, c) (b, c) -> SF a b
loopPre Bool
True forall a b. (a -> b) -> a -> b
$ forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr (\((Bool
i,Bool
u),Bool
o) -> let n :: Bool
n = Bool
o Bool -> Bool -> Bool
&& Bool
i
in ((Bool
n, if (Bool
o Bool -> Bool -> Bool
&& Bool
u) then forall a. a -> Event a
Event () else forall a. Event a
NoEvent), Bool
n)))
(\()
_ -> forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr forall a b. (a, b) -> b
snd forall {k} (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> SF Bool Bool
sofarSF)