5 ms·
You can't have monads in Scheme due to the lack of a type system. What you can have are instances of monads, but the point of using the concept of a monad is to
by quchen 13y ago
You can't have monads in Scheme due to the lack of a type system. What you can have are instances of monads, but the point of using the concept of a monad is to abstract over it, and to have functions that work with any possible instance.
- dschiptsov 13y agohttp://karma-engineering.com/lab/wiki/Tutorial10 http://karma-engineering.com/lab/wiki/Tutorial10
- dragonwriter 13y ago> You can't have monads in Scheme due to the lack of a type system. You can have monads in almost any language. The lack of static typing means you don't have static type safety with them, but monads aren't any different than anything else in that regard. > What you can have are instances of monads, but the point of using the concept of a monad is to abstract over it, and to have functions that work with any possible instance. How does not having static typing prevent you from abstracting over monads? You can still write functions that work with any possible instance of a monad in languages without static typing.
- tree_of_item 13y ago> How does not having static typing prevent you from abstracting over monads? They were probably talking about the way Haskell can figure out which monad you're in through type inference. As an example, `return :: a -> m a` dispatches on the type of the function's return value, which doesn't map cleanly to a dynamically typed implementation. You need to be explicit about the monad you're in if you don't have the compiler helping you out.
- dragonwriter 13y agoThat's true (and, heck, its true even of many static languages that support monads; that feature of Haskell is due to its better-than-most type inference, not just having static typing), but I don't see how that limits the capacity for abstraction. Certainly, you may need an additional explicit parameter in some cases rather than effectively implicitly supplying information via type inference, but that doesn't change the level of abstraction.
- tree_of_item 13y agoFunctions that work on "any monad" in Scheme can accept the monad operations as an extra parameter. A macro can hide this, like (with-monad m (monad-operation data)) See https://github.com/clojure/algo.monads https://github.com/clojure/algo.monads for an implementation of this in Clojure.
- PuercoPop 13y agohttp://www.pvk.ca/Blog/2013/09/19/all-you-need-is-call-slash-cc/ http://www.pvk.ca/Blog/2013/09/19/all-you-need-is-call-slash... Think again, Paul Khoung walks you through implementing some monads using call/cc