open import FRP.JS.Nat using ( ℕ ; float ) renaming
( _+_ to _+n_ ; _∸_ to _∸n_ ; _*_ to _*n_ ; _≟_ to _≟n_ ; _≠_ to _≠n_
; _/_ to _/n_ ; _/?_ to _/?n_ ; _≤_ to _≤n_ ; _<_ to _<n_ )
open import FRP.JS.Float using ( ℝ )
open import FRP.JS.Bool using ( Bool )
open import FRP.JS.True using ( True )
open import FRP.JS.Maybe using ( Maybe )
module FRP.JS.Delay where
record Delay : Set where
constructor _ms
field toℕ : ℕ
{-# COMPILED_JS Delay function(x,v) { return v["_ms"](x); } #-}
{-# COMPILED_JS _ms function(d) { return d; } #-}
_≟_ : Delay → Delay → Bool
(d ms) ≟ (e ms) = d ≟n e
{-# COMPILED_JS _≟_ function(d) { return function(e) { return d === e; }; } #-}
_≠_ : Delay → Delay → Bool
(d ms) ≠ (e ms) = d ≠n e
{-# COMPILED_JS _≠_ function(d) { return function(e) { return d !== e; }; } #-}
_≤_ : Delay → Delay → Bool
(d ms) ≤ (e ms) = d ≤n e
{-# COMPILED_JS _≤_ function(d) { return function(e) { return d <= e; }; } #-}
_<_ : Delay → Delay → Bool
(d ms) < (e ms) = d <n e
{-# COMPILED_JS _<_ function(d) { return function(e) { return d < e; }; } #-}
_+_ : Delay → Delay → Delay
(d ms) + (e ms) = (d +n e) ms
{-# COMPILED_JS _+_ function(d) { return function(e) { return d + e; }; } #-}
_∸_ : Delay → Delay → Delay
(d ms) ∸ (e ms) = (d ∸n e) ms
{-# COMPILED_JS _∸_ function(d) { return function(e) { return Math.min(0, d - e); }; } #-}
_*_ : ℕ → Delay → Delay
n * (d ms) = (n *n d) ms
{-# COMPILED_JS _*_ function(n) { return function(d) { return n * d; }; } #-}
_/_ : ∀ (d e : Delay) → {e≠0 : True (e ≠ 0 ms)} → ℝ
_/_ (d ms) (e ms) {e≠0} = _/n_ d e {e≠0}
{-# COMPILED_JS _/_ function(d) { return function(e) { return function() { return d / e; }; }; } #-}
_/?_ : Delay → Delay → Maybe ℝ
(d ms) /? (e ms) = d /?n e
{-# COMPILED_JS _/?_ function(d) { return function(e) { if (e === 0) { return null; } else { return d / e; } }; } #-}
_sec : ℕ → Delay
n sec = n * (1000 ms)
{-# COMPILED_JS _sec function(t) { return t * 1000; } #-}
_min : ℕ → Delay
n min = n * (60000 ms)
{-# COMPILED_JS _min function(t) { return t * 60000; } #-}