diff options
Diffstat (limited to '')
-rw-r--r-- | stdlib/source/lux/abstract/monad/free.lux | 67 |
1 files changed, 0 insertions, 67 deletions
diff --git a/stdlib/source/lux/abstract/monad/free.lux b/stdlib/source/lux/abstract/monad/free.lux deleted file mode 100644 index 7a9efbeea..000000000 --- a/stdlib/source/lux/abstract/monad/free.lux +++ /dev/null @@ -1,67 +0,0 @@ -(.module: - [lux #*] - [/// - [functor (#+ Functor)] - [apply (#+ Apply)] - [monad (#+ Monad)]]) - -(type: #export (Free F a) - {#.doc "The Free Monad."} - (#Pure a) - (#Effect (F (Free F a)))) - -(implementation: #export (functor dsl) - (All [F] (-> (Functor F) (Functor (Free F)))) - - (def: (map f ea) - (case ea - (#Pure a) - (#Pure (f a)) - - (#Effect value) - (#Effect (\ dsl map (map f) value))))) - -(implementation: #export (apply dsl) - (All [F] (-> (Functor F) (Apply (Free F)))) - - (def: &functor (..functor dsl)) - - (def: (apply ef ea) - (case [ef ea] - [(#Pure f) (#Pure a)] - (#Pure (f a)) - - [(#Pure f) (#Effect fa)] - (#Effect (\ dsl map - (\ (..functor dsl) map f) - fa)) - - [(#Effect ff) _] - (#Effect (\ dsl map - (function (_ f) (apply f ea)) - ff)) - ))) - -(implementation: #export (monad dsl) - (All [F] (-> (Functor F) (Monad (Free F)))) - - (def: &functor (..functor dsl)) - - (def: (wrap a) - (#Pure a)) - - (def: (join efefa) - (case efefa - (#Pure efa) - (case efa - (#Pure a) - (#Pure a) - - (#Effect fa) - (#Effect fa)) - - (#Effect fefa) - (#Effect (\ dsl map - (\ (monad dsl) join) - fefa)) - ))) |