
On Mon, Aug 18, 2008 at 11:16 AM, Henning Thielemann
On Mon, 18 Aug 2008, Bjorn Buckwalter wrote:
I would like to know if there is any consensus on what is the best way to make such a data structure accessible in pure functions. Passing it explicitly would be a mess. It seems that two options are to use either a Reader monad or implicit parameters. Using a Reader monad is straight forward enough though it requires writing/converting code in/to monadic style and adds some clutter to the formulae. It seems implicit parameters could be cleaner but I've seen them referred to as everything from evil to "just what you need" and rendering the Reader monad obsolete...
I expect that you will get the same range of opinions as you got from your search. As far as I know implicit parameters break referential transparency. http://www.haskell.org/haskellwiki/The_Monad.Reader/Issue2/FunWithLinearImpl... So I prefer Reader monad. The burden of converting to monadic style pays off when you need to use the same code with different values for the "constants". (E.g. find out for which value of the Planck constant the universe collapses and for which it oscillates etc. :-)
Love the example but could you elaborate a little on how monadic style helps with this? (This is probably a matter of it not being obvious to me what approach you would take to solving the problem.) By the way, can anyone comment on implicit parameters interacting with monadic code? If I were to use implicit parameters and later realize that I need other monadic functionality, e.g. Writer, would I be in a tough spot or would the implicit parameters continue to work "seemlesly" in the monadic code? Thanks, Bjorn Buckwalter