[Haskell-beginners] Re: multreplace

Daniel Fischer daniel.is.fischer at web.de
Fri Jul 2 17:30:18 EDT 2010


On Friday 02 July 2010 23:15:22, Patrick LeBoutillier wrote:
> > multRepl = foldl (uncurry . replace)
>
> Actually I've been thinking about this and I can't quite figure out
> how it works:
>
> I understand the type of replace is
>
>   replace :: (Eq a) => [a] -> [a] -> [a] -> [a]
>
> but I can't figure out how the type of (uncurry . replace) becomes
>
>   uncurry . replace :: (Eq a) => [a] -> ([a], [a]) -> [a]
>
> ?

let's make it

foo :: a -> b -> c -> d

to not get confused by the fact that replace's arguments and result all 
have the same type.

So, what does uncurry . foo do?
Well, (f . g) x = f (g x), so when we apply (uncurry . foo) to an argument 
x, we get

uncurry (foo x)

Now, x is the first argument of foo, so x :: a, and

(foo x) :: b -> c -> d

That means (foo x) has just the type uncurry expects, hence

uncurry (foo x) :: (b, c) ->  d

Now write uncurry (foo x) again as

(uncurry . foo) x :: (b, c) -> d

and remove x again, so

(uncurry . foo) :: a -> (b, c) -> d

finally, remember that foo is actually replace and hence all four type 
variables stand for the same list type (with an Eq constraint).

>
>
> Patrick



More information about the Beginners mailing list