@@ -1,263 +1,265 @@
1−id :: forall a. a -> a
1+module Prelude where
4−flip :: forall a b c. (a -> b -> c) -> b -> a -> c
3+ id :: forall a. a -> a
5−flip = \f -> \b -> \a -> f a b
4+ id = \x -> x
7−konst :: forall a b. a -> b -> a
6+ flip :: forall a b c. (a -> b -> c) -> b -> a -> c
8−konst = \a -> \b -> a
7+ flip = \f -> \b -> \a -> f a b
10−(|>) :: forall a b c. (a -> b) -> (b -> c) -> a -> c
9+ konst :: forall a b. a -> b -> a
11−(|>) = \f -> \g -> \a -> g (f a)
10+ konst = \a -> \b -> a
13−(<|) :: forall a b c. (b -> c) -> (a -> b) -> a -> c
12+ (|>) :: forall a b c. (a -> b) -> (b -> c) -> a -> c
14−(<|) = flip (|>)
13+ (|>) = \f -> \g -> \a -> g (f a)
16−-- Maybe
15+ (<|) :: forall a b c. (b -> c) -> (a -> b) -> a -> c
18−data Maybe a = Nothing | Just a
18+ -- Maybe
20−maybe :: forall a b. b -> (a -> b) -> Maybe a -> b
20+ data Maybe a = Nothing | Just a
22−maybe _ f (Just a) = f a
24−fromMaybe :: forall a. a -> Maybe a -> a
22+ maybe :: forall a b. b -> (a -> b) -> Maybe a -> b
25−fromMaybe a = maybe a id
23+ maybe b _ Nothing = b
24+ maybe _ f (Just a) = f a
27−bindMaybe :: forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
26+ fromMaybe :: forall a. a -> Maybe a -> a
28−bindMaybe m f = maybe Nothing f m
27+ fromMaybe a = maybe a id
30−-- Either
29+ bindMaybe :: forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
30+ bindMaybe m f = maybe Nothing f m
32−data Either a b = Left a | Right b
32+ -- Either
34−either :: forall a b c. (a -> c) -> (b -> c) -> Either a b -> c
34+ data Either a b = Left a | Right b
35−either f _ (Left a) = f a
36−either _ g (Right b) = g b
38−bindEither :: forall e a b. Either e a -> (a -> Either e b) -> Either e b
36+ either :: forall a b c. (a -> c) -> (b -> c) -> Either a b -> c
39−bindEither = either (\e _ -> Left e) (\a f -> f a)
37+ either f _ (Left a) = f a
38+ either _ g (Right b) = g b
41−-- Arrays
40+ bindEither :: forall e a b. Either e a -> (a -> Either e b) -> Either e b
41+ bindEither = either (\e _ -> Left e) (\a f -> f a)
43−head :: forall a. [a] -> a
43+ -- Arrays
46−headSafe :: forall a. [a] -> Maybe a
45+ head :: forall a. [a] -> a
47−headSafe (x : _) = Just x
46+ head (x : _) = x
50−tail :: forall a. [a] -> [a]
48+ headSafe :: forall a. [a] -> Maybe a
51−tail (_ : xs) = xs
49+ headSafe (x : _) = Just x
53−tailSafe :: forall a. [a] -> Maybe [a]
52+ tail :: forall a. [a] -> [a]
54−tailSafe (_ : xs) = Just xs
53+ tail (_ : xs) = xs
57−foreign import map :: forall a b. (a -> b) -> [a] -> [b]
55+ tailSafe :: forall a. [a] -> Maybe [a]
56+ tailSafe (_ : xs) = Just xs
59−foldr :: forall a b. (a -> b -> a) -> a -> [b] -> a
59+ foreign import map :: forall a b. (a -> b) -> [a] -> [b]
60−foldr f a (b : bs) = f (foldr f a bs) b
61+ foldr :: forall a b. (a -> b -> a) -> a -> [b] -> a
62+ foldr f a (b : bs) = f (foldr f a bs) b
63−foldl :: forall a b. (a -> b -> b) -> b -> [a] -> b
65+ foldl :: forall a b. (a -> b -> b) -> b -> [a] -> b
64−foldl f b as = {
66+ foldl f b as = {
65− var result = b;
67+ var result = b;
66− foreach (a in as) {
68+ foreach (a in as) {
67− result = f a result;
69+ result = f a result;
72−foreign import member "length" length :: forall a. [a] -> Number
74+ foreign import member "length" length :: forall a. [a] -> Number
74−foreign import indexOf :: forall a. [a] -> a -> Number
76+ foreign import indexOf :: forall a. [a] -> a -> Number
76−foreign import lastIndexOf :: forall a. [a] -> a -> Number
78+ foreign import lastIndexOf :: forall a. [a] -> a -> Number
78−foreign import concat :: forall a. [a] -> [a] -> [a]
80+ foreign import concat :: forall a. [a] -> [a] -> [a]
80−foreign import join :: [String] -> String
82+ foreign import join :: [String] -> String
82−foreign import joinWith :: [String] -> String -> String
84+ foreign import joinWith :: [String] -> String -> String
84−foreign import push :: forall a. [a] -> a -> [a]
86+ foreign import push :: forall a. [a] -> a -> [a]
86−foreign import reverse :: forall a. [a] -> [a]
88+ foreign import reverse :: forall a. [a] -> [a]
88−foreign import shift :: forall a. [a] -> [a]
90+ foreign import shift :: forall a. [a] -> [a]
90−foreign import slice :: forall a. Number -> Number -> [a] -> [a]
92+ foreign import slice :: forall a. Number -> Number -> [a] -> [a]
92−foreign import sort :: forall a. [a] -> [a]
94+ foreign import sort :: forall a. [a] -> [a]
94−foreign import splice :: forall a. Number -> Number -> [a] -> [a] -> [a]
96+ foreign import splice :: forall a. Number -> Number -> [a] -> [a] -> [a]
96−cons :: forall a. a -> [a] -> [a]
98+ cons :: forall a. a -> [a] -> [a]
97−cons = \a -> concat([a])
99+ cons = \a -> concat([a])
99−concatMap :: forall a b. [a] -> (a -> [b]) -> [b]
101+ concatMap :: forall a b. [a] -> (a -> [b]) -> [b]
100−concatMap as f = {
102+ concatMap as f = {
101− var result = [];
103+ var result = [];
102− foreach (a in as) {
104+ foreach (a in as) {
103− result = result `concat` f a;
105+ result = result `concat` f a;
108−foreign import filter :: forall a. [a] -> (a -> Boolean) -> [a]
110+ foreign import filter :: forall a. [a] -> (a -> Boolean) -> [a]
110−empty :: forall a. [a] -> Boolean
112+ empty :: forall a. [a] -> Boolean
111−empty [] = true
113+ empty [] = true
112−empty _ = false
114+ empty _ = false
114−range :: Number -> Number -> [Number]
116+ range :: Number -> Number -> [Number]
115−range lo hi = {
117+ range lo hi = {
116− var ns = [];
118+ var ns = [];
117− for (n <- lo until hi) {
119+ for (n <- lo until hi) {
118− ns = push ns n;
120+ ns = push ns n;
123−zipWith :: forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
125+ zipWith :: forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
124−zipWith f (a:as) (b:bs) = cons (f a b) (zipWith f as bs)
126+ zipWith f (a:as) (b:bs) = cons (f a b) (zipWith f as bs)
125−zipWith _ _ _ = []
127+ zipWith _ _ _ = []
127−any :: forall a. (a -> Boolean) -> [a] -> Boolean
129+ any :: forall a. (a -> Boolean) -> [a] -> Boolean
128−any p as = {
130+ any p as = {
129− for (i <- 0 until length as) {
131+ for (i <- 0 until length as) {
130− if (p (as !! i)) {
132+ if (p (as !! i)) {
131− return true;
133+ return true;
137−all :: forall a. (a -> Boolean) -> [a] -> Boolean
139+ all :: forall a. (a -> Boolean) -> [a] -> Boolean
138−all p as = {
140+ all p as = {
139− for (i <- 0 until length as) {
141+ for (i <- 0 until length as) {
140− if (!(p (as !! i))) {
142+ if (!(p (as !! i))) {
141− return false;
143+ return false;
147−-- Pairs
149+ -- Pairs
149−type Tuple a b = { fst :: a, snd :: b }
151+ type Tuple a b = { fst :: a, snd :: b }
151−curry :: forall a b c. (Tuple a b -> c) -> a -> b -> c
153+ curry :: forall a b c. (Tuple a b -> c) -> a -> b -> c
152−curry f a b = f { fst: a, snd: b }
154+ curry f a b = f { fst: a, snd: b }
154−uncurry :: forall a b c. (a -> b -> c) -> Tuple a b -> c
156+ uncurry :: forall a b c. (a -> b -> c) -> Tuple a b -> c
155−uncurry f t = f t.fst t.snd
157+ uncurry f t = f t.fst t.snd
157−tuple :: forall a b. a -> b -> Tuple a b
159+ tuple :: forall a b. a -> b -> Tuple a b
158−tuple = curry id
160+ tuple = curry id
160−zip :: forall a b. [a] -> [b] -> [Tuple a b]
162+ zip :: forall a b. [a] -> [b] -> [Tuple a b]
161−zip = zipWith tuple
163+ zip = zipWith tuple
163−unzip :: forall a b. [Tuple a b] -> Tuple [a] [b]
165+ unzip :: forall a b. [Tuple a b] -> Tuple [a] [b]
164−unzip (t:ts) = case unzip ts of
166+ unzip (t:ts) = case unzip ts of
165− { fst = as, snd = bs } -> tuple (cons t.fst as) (cons t.snd bs)
167+ { fst = as, snd = bs } -> tuple (cons t.fst as) (cons t.snd bs)
166−unzip [] = tuple [] []
168+ unzip [] = tuple [] []
168−-- Strings
170+ -- Strings
170−foreign import member "length" lengthS :: String -> Number
172+ foreign import member "length" lengthS :: String -> Number
172−foreign import charAt :: Number -> String -> String
174+ foreign import charAt :: Number -> String -> String
174−foreign import indexOfS :: String -> String -> Number
176+ foreign import indexOfS :: String -> String -> Number
176−foreign import lastIndexOfS :: String -> String -> Number
178+ foreign import lastIndexOfS :: String -> String -> Number
178−foreign import localeCompare :: String -> String -> Number
180+ foreign import localeCompare :: String -> String -> Number
180−foreign import replace :: String -> String -> String -> String
182+ foreign import replace :: String -> String -> String -> String
182−foreign import sliceS :: Number -> Number -> String -> String
184+ foreign import sliceS :: Number -> Number -> String -> String
184−foreign import split :: String -> String -> [String]
186+ foreign import split :: String -> String -> [String]
186−foreign import substr :: Number -> Number -> String -> String
188+ foreign import substr :: Number -> Number -> String -> String
188−foreign import substring :: Number -> Number -> String -> String
190+ foreign import substring :: Number -> Number -> String -> String
190−foreign import toLower :: String -> String
192+ foreign import toLower :: String -> String
192−foreign import toUpper :: String -> String
194+ foreign import toUpper :: String -> String
194−foreign import trim :: String -> String
196+ foreign import trim :: String -> String
196−-- Regex
198+ -- Regex
198−foreign import data Regex :: *
200+ foreign import data Regex :: *
200−foreign import regex :: String -> String -> Regex
202+ foreign import regex :: String -> String -> Regex
202−foreign import test :: Regex -> String -> Boolean
204+ foreign import test :: Regex -> String -> Boolean
204−foreign import match :: Regex -> String -> [String]
206+ foreign import match :: Regex -> String -> [String]
206−foreign import replaceR :: Regex -> String -> String -> String
208+ foreign import replaceR :: Regex -> String -> String -> String
208−foreign import search :: Regex -> String -> Number
210+ foreign import search :: Regex -> String -> Number
210−-- Globals
212+ -- Globals
212−foreign import nan :: Number
214+ foreign import nan :: Number
214−foreign import infinity :: Number
216+ foreign import infinity :: Number
216−foreign import toExponential :: Number -> String
218+ foreign import toExponential :: Number -> String
218−foreign import toFixed :: Number -> Number -> String
220+ foreign import toFixed :: Number -> Number -> String
220−foreign import toPrecision :: Number -> Number -> String
222+ foreign import toPrecision :: Number -> Number -> String
222−foreign import numberToString :: Number -> String
224+ foreign import numberToString :: Number -> String
224−foreign import isNaN :: Number -> Boolean
226+ foreign import isNaN :: Number -> Boolean
226−foreign import isFinite :: Number -> Boolean
228+ foreign import isFinite :: Number -> Boolean
228−foreign import parseFloat :: String -> Number
230+ foreign import parseFloat :: String -> Number
230−foreign import parseInt :: String -> Number
232+ foreign import parseInt :: String -> Number
232−foreign import encodeURIComponent :: String -> String
234+ foreign import encodeURIComponent :: String -> String
234−foreign import decodeURIComponent :: String -> String
236+ foreign import decodeURIComponent :: String -> String
236−foreign import encodeURI :: String -> String
238+ foreign import encodeURI :: String -> String
238−foreign import decodeURI :: String -> String
240+ foreign import decodeURI :: String -> String
242−type Math =
244+ type Math =
243− { abs :: Number -> Number
245+ { abs :: Number -> Number
244− , acos :: Number -> Number
246+ , acos :: Number -> Number
245− , asin :: Number -> Number
247+ , asin :: Number -> Number
246− , atan :: Number -> Number
248+ , atan :: Number -> Number
247− , atan2 :: (Number, Number) -> Number
249+ , atan2 :: (Number, Number) -> Number
248− , aceil :: Number -> Number
250+ , aceil :: Number -> Number
249− , cos :: Number -> Number
251+ , cos :: Number -> Number
250− , exp :: Number -> Number
252+ , exp :: Number -> Number
251− , floor :: Number -> Number
253+ , floor :: Number -> Number
252− , log :: Number -> Number
254+ , log :: Number -> Number
253− , max :: (Number, Number) -> Number
255+ , max :: (Number, Number) -> Number
254− , pow :: (Number, Number) -> Number
256+ , pow :: (Number, Number) -> Number
255− , random :: () -> Number
257+ , random :: () -> Number
256− , round :: Number -> Number
258+ , round :: Number -> Number
257− , sin :: Number -> Number
259+ , sin :: Number -> Number
258− , sqrt :: Number -> Number
260+ , sqrt :: Number -> Number
259− , tan :: Number -> Number
261+ , tan :: Number -> Number
262−foreign import math :: Math
264+ foreign import math :: Math