open import FRP.JS.Bool using ( Bool ; not ) open import FRP.JS.Event using ( Evt ; accumBy ) open import FRP.JS.RSet using ( RSet ; _⇒_ ; ⟦_⟧ ; ⟨_⟩ ) module FRP.JS.Behaviour where postulate Beh : RSet → RSet map : ∀ {A B} → ⟦ A ⇒ B ⟧ → ⟦ Beh A ⇒ Beh B ⟧ map2 : ∀ {A B C} → ⟦ A ⇒ B ⇒ C ⟧ → ⟦ Beh A ⇒ Beh B ⇒ Beh C ⟧ [_] : ∀ {A} → A → ⟦ Beh ⟨ A ⟩ ⟧ join : ∀ {A} → ⟦ Beh (Beh A) ⇒ Beh A ⟧ hold : ∀ {A} → ⟦ ⟨ A ⟩ ⇒ Evt ⟨ A ⟩ ⇒ Beh ⟨ A ⟩ ⟧ {-# COMPILED_JS map function(A) { return function(B) { return function(f) { return function(s) { return function(b) { return b.map(function (t,v) { return f(t)(v); }); }; }; }; }; } #-} {-# COMPILED_JS map2 function(A) { return function(B) { return function(C) { return function(f) { return function(s) { return function(a) { return function(b) { return a.map2(b, function (t,v1,v2) { return f(t)(v1)(v2); }); }; }; }; }; }; }; } #-} {-# COMPILED_JS [_] function(A) { return function(a) { return function(s) { return require("agda.frp").constant(a); }; }; } #-} {-# COMPILED_JS join function(A) { return function(s) { return function(b) { return b.join(); }; }; } #-} {-# COMPILED_JS hold function(A) { return function(s) { return function(a) { return function(e) { return e.hold(a); }; }; }; } #-} accumHoldBy : ∀ {A B} → ⟦ (⟨ B ⟩ ⇒ A ⇒ ⟨ B ⟩) ⟧ → B → ⟦ Evt A ⇒ Beh ⟨ B ⟩ ⟧ accumHoldBy f b σ = hold b (accumBy f b σ) not* : ⟦ Beh ⟨ Bool ⟩ ⇒ Beh ⟨ Bool ⟩ ⟧ not* = map not