2 Sep 09:53
The final view on typed sprintf and sscanf
From: <oleg <at> okmij.org>
Subject: The final view on typed sprintf and sscanf
Newsgroups: gmane.comp.lang.haskell.general
Date: 2008-09-02 07:57:18 GMT
Subject: The final view on typed sprintf and sscanf
Newsgroups: gmane.comp.lang.haskell.general
Date: 2008-09-02 07:57:18 GMT
It would be remiss not to mention the dual solution to the problem of typed sprintf and sscanf sharing the same formatting specification. The previous message defined the embedded domain-specific language of formatting specifications in the initial style, as a data type. The language can also be defined in the final style. To the end user, the difference is hardly noticeable: all the tests of the previous message work as they are (modulo a few adjustments caused by the monomorphism restriction). However, whereas the initial style required GADT, the final solution is entirely in Haskell98. One often hears that hardly anything interesting can be written in Haskell98. I submit that implementing type-indexed terms, thought to require GADTs or similar dependent-type-like extensions, ought to count as interesting. Again, the formulation of the problem and the end-user interface remain exactly the same as described in the previous message. Here are a few examples: > tp1 = sprintf $ lit "Hello world" > -- "Hello world" > ts1 = sscanf "Hello world" (lit "Hello world") () > -- Just () > tp2 = sprintf (lit "Hello " ^ lit "world" ^ char) '!' > -- "Hello world!" > ts2 = sscanf "Hello world!" (lit "Hello " ^ lit "world" ^ char) id > -- Just '!' > fmt3 () = lit "The value of " ^ char ^ lit " is " ^ int(Continue reading)
RSS Feed