News for hackers. Stuff that matters.
Re:What is the advantage of currying? by chongli on Saturday February 02, 2013 @11:36AM (#5156411)
Haskell has printf without using lists-as-parameters. It accomplishes this by doing some very clever type-level trickery. The key idea is in the recursive definition of this instance of PrintfType:

    instance (PrintfArg a, PrintfType r) => PrintfType (a -> r) where
Re:What is the advantage of currying? by philsnow on Saturday February 02, 2013 @03:43PM (#5157263)
Your snippet got cut off, care to paste the rest? I'm guessing it works by popping the format string and the first operand off the args, and then finding the first formatting escape in the format string and formatting it, then recurse.
Re:What is the advantage of currying? by chongli on Saturday February 02, 2013 @04:52PM (#5157504)
Yeah, sorry. Here's the full snippet:

    instance (PrintfArg a, PrintfType r) => PrintfType (a -> r) where
    spr fmts args = \ a -> spr fmts (toUPrintf a : args)
And spr is a polymorphic function of the type:

    spr :: String -> [UPrintf] -> t
Essentially the way this works is that it recursively conses up a list of the arguments, calling toUPrintf on each.