Any idea whether Martin Odersky has read this discussion? Thanks and regards, -Damodar Kulkarni
On Fri, Jun 29, 2012 at 12:23 AM, Dominique Devriese < dominique.devri...@cs.kuleuven.be> wrote: > 2012/6/27 Tillmann Rendel <ren...@informatik.uni-marburg.de>: > > MightyByte wrote: > >> > >> Of course every line of your program that uses a Foo will change if you > >> switch > >> to IO Foo instead. > > > > > > But we often have to also change lines that don't use Foo at all. For > > example, here is the type of binary trees of integers: > > > > data Tree = Leaf Integer | Branch (Tree Integer) (Tree Integer) > > > > A function to add up all integers in a tree: > > > > amount:: Tree -> Integer > > amount (Leaf x) = x > > amount (Branch t1 t2) = amountt1 + amountt2 > > > > All fine so far. Now, consider the following additional requirement: "If > the > > command-line flag --multiply is set, the function amount computes the > > product instead of the sum." > > > > In a language with implicit side effects, it is easy to implement this. > We > > just change the third line of the amount function to check whether to > call > > (+) or (*). In particular, we would not touch the other two lines. > > > > How would you implement this requirement in Haskell without changing the > > line "amount (Leaf x) = x"? > > I may be missing the point here, but having worked on large code bases > with a wide variety contributors before, I find it very advantageous > that programmers are prevented from writing an amount function whose > behaviour depends on command line arguments without at least an > indication in the type. The fact that the function can not perform > stuff like that is precisely the guarantee that the Haskell type gives > me... > > Dominique > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe