Yes Rich Hickey advises against it here...
http://groups.google.com/group/clojure/browse_frm/thread/9eaf7be6a65e70df#

On Sep 17, 9:26 pm, David Nolen <dnolen.li...@gmail.com> wrote:
> I believe maps containing functions are generally looked down upon.
> Multimethods are probably the way to go. Can't you tag your request map with
> a type?
>
> On Thu, Sep 17, 2009 at 7:50 AM, Philipp Meier <phme...@gmail.com> wrote:
>
> > Hi,
>
> > I'm building a REST server library on top of compojure loosely modeled
> > after the ideas of erlangs webmachine. The idea is to describe a
> > resource using a couple of function which server as decision makers
> > for the different stages of HTTP request processing. There will be a
> > function to determine if the request method is allowed, if the request
> > is authorized, a method to produce an ETAG or to process the request
> > body in case of a POST request. Something like
>
> > (defn valid-method? [request] (= (get-method request) :get)
> > (defn generate-etag [request] (make-hash-md5 (get-path request)))
> > (defn process-post [request] (str "The body was" (get-body request))
>
> > The question is: how can on group the methods together for different
> > resources and to enable fall back do default implementation of the
> > methods (e.g. generate an etag by sha-ing the response body)?
>
> > Two solutions come to my mind: multimethods and maps of methods.
>
> > For multimethods id declare a type :rest-ressource which methods will
> > serve as a default implementation and that could be overridden by each
> > sub type resource.
>
> > By maps of methods I mean something like
>
> > (def rest-default-impl {
> >  :valid-method? (fn [request] (contains [:head :get] (get-method
> > request)))
> >  # ...
> > })
>
> > (defn make-rest [method-map]
> >  (merge rest-default-impl method-map))
>
> > (def test-resource make-rest({ :valid-method? (fn [request] (= (get-
> > method request) :get))
> >                                            :body { :text/html (fn
> > [request] "Hello, world.") }}))
>
> > Which way would you prefer? What are to advantaces and drawbacks of
> > each? The method-map approach seams more fp to me, but, I think that's
> > like how multimethods are impemented, aren't they?
>
> > -billy.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to