diff options
Diffstat (limited to 'stdlib')
| -rw-r--r-- | stdlib/common.milch | 125 | ||||
| -rw-r--r-- | stdlib/maybe.milch | 44 |
2 files changed, 0 insertions, 169 deletions
diff --git a/stdlib/common.milch b/stdlib/common.milch deleted file mode 100644 index f05c6a5..0000000 --- a/stdlib/common.milch +++ /dev/null @@ -1,125 +0,0 @@ -(let compose (\[f g] - (\[x] (f (g x))))) - -(let id (\[a] a)) - -(let mod (\[n k] - (- n (* k (/ n k))))) - -(let not (\[b] - (match b - true false - false true))) - -(let is-even (\[n] - (match (mod n 2) - 0 true - 1 false))) - -(let is-odd (compose not is-even)) - -;; map :: (a -> b) -> [a] -> [b] -(let map (\[f lst] - (match lst - [] - [] - otherwise - (prepend (f (head lst)) (map f (tail lst)))))) - -; (map (+ 1) [1 2 3]) - -;; foldr :: (a -> b -> b) -> b -> [a] -> b -(let foldr (\[f accumulator lst] - (match lst - [] - accumulator - otherwise - (f (head lst) (foldr f accumulator (tail lst)))))) - -;; filter :: (a -> Bool) -> [a] -> [a] -(let filter (\[pred lst] - (match lst - [] [] - otherwise (match (pred (head lst)) - true - (prepend (head lst) (filter pred (tail lst))) - false - (filter pred (tail lst)))))) - -(let reverse_ (\[v a] - (let lazy x (head v)) - (let lazy xs (tail v)) - (let lazy xa (prepend x a)) - (match v - [] a - _ (reverse_ xs xa)))) - -(let reverse (\[v] - (reverse_ v []))) - -(let flow (\[fs] (foldr compose id (reverse fs)))) -(let pipe (\[x fs] ((flow fs) x))) - -(let leq? (\[a b] - (or? - (eq? a b) - (lt? a b)))) - -(let rt? (compose not leq?)) -(let req? (compose not lt?)) - -(let max2 (\[a b] - (match (lt? a b) - true b - false a))) - -(let max (\[vals] - (let lazy v (head vals)) - (let vs (tail vals)) - - (match vs - [] v - otherwise (max2 v (max vs))))) - -(let split-by' (\[delim acc vals] - (let lazy v (head vals)) - (let vs (tail vals)) - - (match vs - [] (match v - delim [(reverse acc)] - otherwise [(prepend v (reverse acc))]) - otherwise (match v - delim (prepend (reverse acc) (split-by' delim [] vs)) - otherwise (split-by' delim (prepend v acc) vs))))) - -; split vector by delimiter -(let split-by (\[delim vals] - (split-by' delim [] vals))) - -(let at (\[n seq] - (match seq - [] (fatal! (fmt "at out of bounds, n: {0}" [n])) - otherwise (match n - 0 (head seq) - otherwise (at (- n 1) (tail seq)))))) - -(let print-fmt! (\![fstr args] - (print! (fmt fstr args)))) - -(let sort-by (\[keyf vals] - (let sorted (sort-by-first - (map (\[v] - [(keyf v) v]) vals))) - - (map (at 1) sorted))) - -(let take (\[n xs] - (match n - 0 [] - otherwise (prepend (head xs) (take (- n 1) (tail xs)))))) - -(let drop (\[n xs] - (match n - 0 xs - otherwise (drop (- n 1) (tail xs))))) diff --git a/stdlib/maybe.milch b/stdlib/maybe.milch deleted file mode 100644 index ef9e906..0000000 --- a/stdlib/maybe.milch +++ /dev/null @@ -1,44 +0,0 @@ -; LIB - -(record Maybe/Just value) -(record Maybe/Nothing) - -(let Maybe/just Maybe/Just/create) -(let Maybe/nothing Maybe/Nothing/create) - -(let Maybe/map (\[f m] - (match (kind m) - "Maybe/Just" (Maybe/just (f (Maybe/Just/get-value m))) - "Maybe/Nothing" (Maybe/nothing)))) - -(let Maybe/and-then (\[f m] - (match (kind m) - "Maybe/Just" (f (Maybe/Just/get-value m)) - "Maybe/Nothing" (Maybe/nothing)))) - -; TESTING - -;; (let print-line! (\[s] -;; (print! (concat s "\n")))) - -;; (let a (Maybe/just 10)) -;; (let b (Maybe/nothing)) - -;; (Maybe/map (+ 5) a) -;; (Maybe/map (+ 5) b) - -;; (Maybe/and-then (\[n] (Maybe/just (+ n 5))) a) -;; (Maybe/and-then (\[n] (Maybe/just (+ n 5))) b) - -;; (let m (Maybe/just 10)) -;; (match m -;; (Maybe/just _) -;; (print-line! (fmt "found just {0}!" [(Maybe/Just/get-value m)])) -;; (Maybe/nothing) -;; (print-line! "found nothing!")) - -;; (let m (Maybe/just 10)) -;; (pipe m [ -;; (Maybe/map (+ 5)) -;; (Maybe/and-then (\[val] (Maybe/just (- val 3)))) -;; ]) |
