open import FRP.JS.Bool using ( Bool ; _∨_ ; not )
open import FRP.JS.True using ( True )
open import FRP.JS.Maybe using ( Maybe )
open import FRP.JS.Float using ( ℝ ) renaming ( _/?_ to _/?r_ )
open import FRP.JS.Primitive using ( ℕ ; String )
module FRP.JS.Int where
infixr 4 _≤_ _<_ _≟_
infixl 6 _+_ _-_
infixl 7 _*_ _/_ _/?_
open import FRP.JS.Primitive public using ( ℤ )
private
primitive
primIntegerPlus : ℤ -> ℤ -> ℤ
primIntegerMinus : ℤ -> ℤ -> ℤ
primIntegerTimes : ℤ -> ℤ -> ℤ
primIntegerDiv : ℤ -> ℤ -> ℤ
primIntegerMod : ℤ -> ℤ -> ℤ
primIntegerEquality : ℤ -> ℤ -> Bool
primIntegerLess : ℤ -> ℤ -> Bool
primIntegerToFloat : ℤ -> ℝ
primIntegerAbs : ℤ -> ℕ
primShowInteger : ℤ -> String
primNatToInteger : ℕ → ℤ
primFloatDiv : ℝ → ℝ → ℝ
_+_ = primIntegerPlus
_-_ = primIntegerMinus
_*_ = primIntegerTimes
_%_ = primIntegerMod
_≟_ = primIntegerEquality
_<_ = primIntegerLess
float = primIntegerToFloat
abs = primIntegerAbs
show = primShowInteger
{-# COMPILED_JS _+_ function(x) { return function(y) { return x + y; }; } #-}
{-# COMPILED_JS _-_ function(x) { return function(y) { return x - y; }; } #-}
{-# COMPILED_JS _*_ function(x) { return function(y) { return x * y; }; } #-}
{-# COMPILED_JS _%_ function(x) { return function(y) { if (x < 0) { return (x % y) + x; } else { return x % y; } }; } #-}
{-# COMPILED_JS _≟_ function(x) { return function(y) { return x === y; }; } #-}
{-# COMPILED_JS _<_ function(x) { return function(y) { return x < y; }; } #-}
{-# COMPILED_JS float function(x) { return x; } #-}
{-# COMPILED_JS abs function(x) { return Math.abs(x); } #-}
{-# COMPILED_JS show function(x) { return x.toString(); } #-}
+0 = primNatToInteger 0
+1 = primNatToInteger 1
-1 = +0 - +1
-_ : ℤ → ℤ
- x = +0 - x
_≤_ : ℤ → ℤ → Bool
x ≤ y = (x < y) ∨ (x ≟ y)
_≠_ : ℤ → ℤ → Bool
x ≠ y = not (x ≟ y)
_/_ : (x y : ℤ) → {y≠0 : True (y ≠ +0)} → ℝ
x / y = primFloatDiv (float x) (float y)
_/?_ : ℤ → ℤ → Maybe ℝ
x /? y = (float x) /?r (float y)
{-# COMPILED_JS _/_ function(x) { return function(y) { return x / y; }; } #-}
{-# COMPILED_JS _≤_ function(x) { return function(y) { return x <= y; }; } #-}
{-# COMPILED_JS _≠_ function(x) { return function(y) { return x !== y; }; } #-}
{-# COMPILED_JS _/_ function(x) { return function(y) { return function() { return x / y; }; }; } #-}
{-# COMPILED_JS _/?_ function(x) { return function(y) { if (y === 0) { return null; } else { return x / y; } }; } #-}