Hacker News new | ask | show | jobs
Idris: Type safe printf [video] (youtube.com)
54 points by kenhty 4198 days ago
7 comments

You can check format strings in Java at compile-time using the Checker Framework: http://types.cs.washington.edu/checker-framework/current/che...

The format string semantics are actually pretty tricky because printf will perform conversions in certain cases.

Very cool, Idris looks like a really interesting language.

F#'s standard printf-family functions are all type-safe in exactly the same way. This requires special support by the compiler, though, as F#'s type system is not as powerful. Most of the plumbing is standard, but the conversion from string literal to PrintfFormat at compile time is only possible due to hardcoded magic. You can't get exactly the same effect from plain user code, though you could certainly get something very close using a Type Provider (the syntax would just be a bit clunkier).

Have a type provider ;)

http://blog.mavnn.co.uk/type-safe-printf-via-type-providers/

And yes: syntax is not quite so nice.

Why define Format as

    data Format = FInt Format
                | FString Format
                | FOther Char Format
                | FEnd
instead of using lists?

     data FormatPart = FInt | FString | FOther Char
     type Format = List FormatPart
This was awesome and yet one more reason to learn Idris. Now I have to see if it can be done in Scala.
It can, with macros. Though Scala's stri g interpolation will get you mostly there (correct number of arguments, local format specifiers that are harder to mess up).
Maybe it doesn't have to be with macros.
Really cool, but I am assuming printf only works for values which are determined at compile time?
AFAIK the value of the formatting string needs to be known at compile time. Only the types of the rest need to be known.

Actually, since it's dependently typed, we don't actually need to know the value of the formatting string; we just need a proof that the formatting string will match the other values. The easiest way to do this is to know what the string is, but we could also, for example, get these values from a function, then prove that the function produces matching values.

Idris?
My mind immediately went to Star Citizen...
Why?
I guess they mean what Google says: http://starcitizen.wikia.com/wiki/Idris