[Haskell-cafe] Re: Suggestions for improvement
Dominique Devriese
dominique.devriese at cs.kuleuven.be
Tue Oct 5 02:53:50 EDT 2010
2010/10/5 N. Raghavendra <raghu at mri.ernet.in>:
> At 2010-10-03T22:45:30+02:00, Dominique Devriese wrote:
>> comma :: (a -> b) -> (a -> c) -> a -> (b,c)
>> comma f g x = (f x, g x)
>>
>> comma = liftA2 (,)
>> blowup = (uncurry (++)) . liftA2 (,) (blowup . allButLast) lastToTheLength
>
> I tried both of them, but they don't seem to work:
>
> -- Pointfree blowup.
> blowup1 :: String -> String
> blowup1 = (uncurry (++)) . comma1 (blowup1 . allButLast) lastToTheLength
Sorry, I didn't look in detail at your solution in my answer, just
focused on the solution, and only checked that it compiled. Your
problem is that both your blowup functions recurse infinitely on the
empty string (blowup{1,2} [] will always call blowup{1,2} [] again).
Instead of fixing it, I recommend you study one of the other solutions
proposed in this thread, since they are superior in many ways
(shorter, more elegant, more lazy, probably more efficient).
cheers
Dominique
More information about the Haskell-Cafe
mailing list