I did look at the docs and I don't really get how to return a monadic value
in the right monad, the way "return" does automatically. All the examples I
saw have something like "vector" or "atom" or what-have-you.


On Tue, Jul 2, 2013 at 2:41 PM, Dragan Djuric <draga...@gmail.com> wrote:

> No, the second argument to bind only needs to be a function that takes a
> plain value and return a monadic value; you do not need to specify anything
> explicitly and it does not need to know what kind of monad it is operating
> on. Whatever that function returns will be a monad that the eventual second
> bind will operate on.
> Moreover, Fluokitten supports vararg bind, so the function is actually the
> last argument of bind in general case; it is the second argument only if
> there are two args.
>
> Please note that Fluokitten does not have a built-in mdo (a syntactic
> sugar for nested binds) for now. The reason is that Clojure itself has
> native constructs that do many stuff that Haskell's do does, so I am not
> yet sure why and if it would be useful, and if I add it how to make it
> non-awkward. Of course, I am open to suggestions.
> Also note that Fluokitten is not monad-centric, it has functors,
> applicatives, etc and I plan to add more categorical concepts, so It is
> different in that regard from other monadic Clojure libraries. That's why I
> would like to suggest reading the docs, most of the stuff is significantly
> different from other libs, and more similar (but simpler, due to the lack
> of legacy) to Haskell's categorical stuff.
>
>
> On Tuesday, July 2, 2013 9:15:10 PM UTC+2, Ben wrote:
>
>> I haven't played around with this but it looks as if the second argument
>> to bind needs to know what kind of monad it's operating in, is that right?
>> Would it be possible to write agnostic functions like this in this lib?
>>
>> monads.core> (defn tst-reader [f]
>>                (mdo env <- ask
>>                     v <- (lift (f env))
>>                     (return (println "here I am"))
>>                     (return v)))
>> #'monads.core/tst-reader
>> monads.core> (require '[monads.reader :as r] '[monads.identity :as i]
>> '[monads.state :as st] '[monads.error :as e])
>> nil
>> monads.core> (r/run-reader-t (r/t i/m) (tst-reader (comp return inc)) 5)
>> here I am
>> 6
>> monads.core> (r/run-reader-t (r/t e/m) (tst-reader (fn [_] (throw-error
>> "early exit"))) 5)
>> #<Either [:left early exit]>
>> monads.core> (st/run-state (r/run-reader-t (r/t st/m) (tst-reader (fn
>> [env] (>> (modify #(assoc % :env env)) (return (dec env))))) 5) {})
>> here I am
>> #<Pair [4 {:env 5}]>
>> monads.core>
>>
>> ?
>>
>>
>> On Tue, Jul 2, 2013 at 11:07 AM, Dragan Djuric <drag...@gmail.com> wrote:
>>
>>> I am pleased to announce a first public release of new (and different)
>>> "monads and friends" library for Clojure.
>>> Extensive *documentation* is at 
>>> http://fluokitten.**uncomplicate.org<http://fluokitten.uncomplicate.org>
>>>
>>> Fluokitten is a Clojure library that implements category theory
>>> concepts, such as functors, applicative functors, monads, monoids etc. in
>>> idiomatic Clojure.
>>>
>>> Main project goals are:
>>>
>>>    - Fit well into idiomatic Clojure - Clojure programmers should be
>>>    able to use and understand Fluokitten like any regular Clojure library.
>>>    - Fit well into Haskell monadic types conventions - programmers
>>>    should be able to reuse existing widespread monadic programming know-how
>>>    and easily translate it to Clojure code.
>>>    - Be reasonably easy to learn - the code from the existing books,
>>>    articles and tutorials for learning monadic programming, which is usually
>>>    written in Haskell should be easily translatable to Clojure with 
>>> Fluokitten.
>>>    - Offer good performance.
>>>
>>> Please give us your feedback, and we would also love if anyone is
>>> willing to help, regardless of previous experience, so please *get
>>> involved*. There are lots of things to be improved:
>>>
>>>    - If you are a native English speaker, i would really appreciate if
>>>    you can help with correcting the English on the Fluokitten site and in 
>>> the
>>>    documentation.
>>>    - Contribute your example code (your own or the ports from Haskell
>>>    tutorials) to be added to Fluokitten tests.
>>>    - Contribute articles and tutorials.
>>>    - Do code review of the Fluokitten code and suggest improvements.
>>>    - If you find bugs, report them via Fluokitten issue tracker.
>>>    - If you have any additional suggestion, contact us here:
>>>    
>>> http://fluokitten.**uncomplicate.org/articles/**community.html<http://fluokitten.uncomplicate.org/articles/community.html>
>>>
>>>  --
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To post to this group, send email to clo...@googlegroups.com
>>>
>>> Note that posts from new members are moderated - please be patient with
>>> your first post.
>>> To unsubscribe from this group, send email to
>>> clojure+u...@**googlegroups.com
>>>
>>> For more options, visit this group at
>>> http://groups.google.com/**group/clojure?hl=en<http://groups.google.com/group/clojure?hl=en>
>>> ---
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to clojure+u...@**googlegroups.com.
>>>
>>> For more options, visit 
>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
>>> .
>>>
>>>
>>>
>>
>>
>>
>> --
>> Ben Wolfson
>> "Human kind has used its intelligence to vary the flavour of drinks,
>> which may be sweet, aromatic, fermented or spirit-based. ... Family and
>> social life also offer numerous other occasions to consume drinks for
>> pleasure." [Larousse, "Drink" entry]
>>
>>   --
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>



-- 
Ben Wolfson
"Human kind has used its intelligence to vary the flavour of drinks, which
may be sweet, aromatic, fermented or spirit-based. ... Family and social
life also offer numerous other occasions to consume drinks for pleasure."
[Larousse, "Drink" entry]

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to