mirror of
https://github.com/carp-lang/Carp.git
synced 2024-10-11 20:49:05 +03:00
33 lines
865 B
Plaintext
33 lines
865 B
Plaintext
(use IO)
|
|
(use Int)
|
|
(use Array)
|
|
|
|
(definterface fmap (λ [(λ [a] a) b] b))
|
|
|
|
(defmodule ArrayExtension
|
|
(defn fmap [f a] (Array.endo-map f a))
|
|
)
|
|
|
|
(deftype Box [x Int])
|
|
|
|
(defmodule Box
|
|
(defn fmap [f box] (let [new-x (f @(Box.x &box))]
|
|
(Box.set-x box new-x))))
|
|
|
|
(use Box)
|
|
(use ArrayExtension)
|
|
|
|
(defn higherOrder [x] (fmap Int.inc x))
|
|
|
|
(defn main []
|
|
(do
|
|
(println &(str @(Box.x &(fmap Int.inc (Box.init 100)))))
|
|
(println &(str @(Box.x &(Box.fmap inc (Box.init 100)))))
|
|
(println &(str &(ArrayExtension.fmap inc [10 20 30 40 50])))
|
|
(println &(str &(fmap Int.inc [10 20 30 40 50])))
|
|
(println &(Array.str &(fmap Int.inc [10 20 30 40 50])))
|
|
(println &(Array.str &(ArrayExtension.fmap Int.inc [10 20 30 40 50])))
|
|
(println &(str &(higherOrder (Box.init 999))))
|
|
(println &(str &(higherOrder [9 99 999 9999])))
|
|
))
|