[Haskell-cafe] Does anybody dislike implicit params as much as I do?

Dan Doel dan.doel at gmail.com
Thu Mar 12 17:13:20 EDT 2009


On Thursday 12 March 2009 4:36:28 pm Thomas Hartman wrote:
> http://blog.patch-tag.com/2009/03/09/implicitparams-are-evil-thoughts-on-ad
>apting-gitit/
>
> I understand there are arguments for using IPs, but after this
> experience, the ImplicitParams extension is a "code smell" for me.

Implicit parameters are a (sort of) impure version of the reader monad. Of 
course, the 'effects' are still indicated in the type to a degree, but it's 
similar in a way to other languages which have impure IO (for example), except 
that reader is a lot less evil. :)

The main thing they buy you, of course, is programming in a nice, normal, 
applicative style, instead of having to fool with monadic style (of course, 
they also give you multiple such variables, with names no less, that can be 
combined in a more dynamic fashion than Reader. To mimic all that (without 
passing around ST-like references), would probably require, off the top of my 
head, both indexed monads and extensible records. But I digress :)). Perhaps 
with applicative functor combinators, that gap can be lessened a bit. 
Incidentally, your example looks as follows with Reader:

  type ParamsHandler = Reader Params Handler

  withMessages :: [String] -> ParamsHandler -> ParamsHandler
  withMessages msgs val =
    local (\params -> params { pMessages = msgs ++ pMessages params }) val

It'd be even nicer with lenses for updating the params. :)

-- Dan


More information about the Haskell-Cafe mailing list