[Haskell-beginners] Help with Why Do Monads Matter blog post understanding

Brent Yorgey byorgey at seas.upenn.edu
Fri Jun 29 20:52:38 CEST 2012

On Fri, Jun 29, 2012 at 09:57:42AM +0100, Matt Ford wrote:
> Hi,
> I've been reading the following blog post
> https://cdsmith.wordpress.com/2012/04/18/why-do-monads-matter/
> And I think I like it.  But there's a part that I don't get.
> "For a set A, we will define the set Pref(A) to be the set of functions
> from application settings to the set A. Now watch closely: a function in
> context from A to B is just an ordinary function from A to Pref(B). In
> other words, you give it a value from the set A, and it gives you back
> another function that maps from application settings to the set B."
> This is in the "functioning with dependency" section and is talking about a
> procedure that uses outside info from preferences or application settings.
> If I set my prefs as follows
> configvar = 3
> and define a function as follows
> add x = configvar + 6
> So add’s signature is
> add: int -> int
> What does prefs(int) look like? Is that even the right thing to ask?

prefs(int) looks like  Config -> Int (in your example perhaps we
define  type Config = Int), so add should have type

  Int -> (Config -> Int)

The thing that is confusing the issue here is that you just made add
implicitly use the 'configvar' which is in scope, so it does not need
to take it as a parameter.  But imagine that you want to be able to
do multiple runs with different configurations, without recompiling
your program -- then you will need to have any function that needs the
configuation take it as an input.  Like this:

  add x config = config + 6

> By substituting the B for Prefs(B) and returning now only functions from
> Pref(B) don't we lose the rest of the mapping for add i.e., " + 6"?

I don't think I understand this question.


More information about the Beginners mailing list