(.module: lux) (signature: #export (Functor f) (: (All [a b] (-> (-> a b) (-> (f a) (f b)))) map)) (type: #export (Fix f) (f (Fix f))) (type: #export (And f g) (All [a] (& (f a) (g a)))) (type: #export (Or f g) (All [a] (| (f a) (g a)))) (type: #export (Then f g) (All [a] (f (g a)))) (def: #export (compose f-functor g-functor) {#.doc "Functor composition."} (All [F G] (-> (Functor F) (Functor G) (Functor (..Then F G)))) (structure (def: (map f fga) (:: f-functor map (:: g-functor map f) fga)))) (signature: #export (Contravariant f) (: (All [a b] (-> (-> b a) (-> (f a) (f b)))) map-1))