## Copyright (c) Eduardo Julian. All rights reserved. ## The use and distribution terms for this software are covered by the ## Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) ## which can be found in the file epl-v10.html at the root of this distribution. ## By using this software in any fashion, you are agreeing to be bound by ## the terms of this license. ## You must not remove this notice, or any other, from this software. (;import lux (lux/data state)) ## Signatures (defsig #export (Functor f) (: (All [a b] (-> (-> a b) (f a) (f b))) map)) ## Structures (defstruct #export Maybe:Functor (Functor Maybe) (def (map f ma) (case ma #;None #;None (#;Some a) (#;Some (f a))))) (defstruct #export List:Functor (Functor List) (def (map f ma) (case ma #;Nil #;Nil (#;Cons [a ma']) (#;Cons [(f a) (map f ma')])))) (defstruct #export State:Functor (Functor State) (def (map f ma) (lambda [state] (let [[state' a] (ma state)] [state' (f a)]))))