(.module: [lux #* [control [monoid (#+ Monoid)]]]) (def: #export identity {#.doc (doc "Identity function." "Does nothing to it's argument and just returns it." (= (identity "foo") "foo"))} (All [a] (-> a a)) (|>>)) (def: #export (compose f g) {#.doc (doc "Function composition." (= ((compose f g) "foo") (f (g "foo"))))} (All [a b c] (-> (-> b c) (-> a b) (-> a c))) (|>> g f)) (def: #export (constant value) {#.doc (doc "Create constant functions." (= ((constant "foo") "bar") "foo"))} (All [o] (-> o (All [i] (-> i o)))) (function (_ _) value)) (def: #export (flip f) {#.doc (doc "Flips the order of the arguments of a function." (= ((flip f) "foo" "bar") (f "bar" "foo")))} (All [a b c] (-> (-> a b c) (-> b a c))) (function (_ x y) (f y x))) (structure: #export monoid (All [a] (Monoid (-> a a))) (def: identity ..identity) (def: compose ..compose))