
Hi ho,
In general, however, you just need practice. Go code! =)
Righto, I am getting stuck in with that. One last question; I've been trying to read up on Arrows and my mind is being boggled. Via experiment, I have worked out what 'second' was doing (the documentation is useless unless you already understand a lot of stuff I clearly don't) For the other newbies, 'second' takes a function and a tuple, it applies the function to the second thing in your tuple and returns a tuple with the first value unchanged, and the result of applying 'f' to the second:
second (\x -> "fish") (10,20) (10,"fish")
What I am struggling to understand is what on earth the type signature means: :t second second :: (Arrow a) => a b c -> a (d, b) (d, c) How can (\x -> "fish") be an 'a b c' when it really looks like this: :t (\x->"fish") (\x->"fish") :: t -> [Char] And I am pretty sure I never made any Arrpws... I feel I am on the verge of understanding something deep and fundamentally philosophical about the typesystem but I can't quite bend my mind around to it :) All the best, Philip