[Hs-Generics] Proposal #2875: Correct SYB's representation of Char
José Pedro Magalhães
jpm at cs.uu.nl
Thu Dec 11 10:06:50 EST 2008
Hello all,
SYB uses DataRep to represent datatypes:
-- | Public representation of datatypes
data DataRep = AlgRep [Constr]
| IntRep
| FloatRep
| StringRep
| NoRep
I believe that StringRep should be CharRep. Note that IntRep is used for the
primitive Int and Integer datatypes, FloatRep for Float and Double, and
StringRep (apparently) for Char. String, however, is represented as AlgRep
[[],(:)]:
*Main> dataTypeOf 'p'
DataType {tycon = "Prelude.Char", datarep = StringRep}
*Main> dataTypeOf "p"
DataType {tycon = "Prelude.[]", datarep = AlgRep [[],(:)]}
This makes sense, since String is not a primitive datatype. But it causes
the apparently wrong behavior:
*Main> fromConstr (mkStringConstr (dataTypeOf "a") "ab") :: String
"*** Exception: mkStringConstr
*Main> fromConstr (mkStringConstr (dataTypeOf 'a') "ab") :: String
"*** Exception: constrIndex
The correct way of using mkStringConstr is to construct a Char. This,
however, only works for strings with a single character:
*Main> fromConstr (mkStringConstr (dataTypeOf 'a') "b") :: Char
'b'
*Main> fromConstr (mkStringConstr (dataTypeOf 'a') "ab") :: Char
*** Exception: gunfold
*Main> fromConstr (mkStringConstr (dataTypeOf 'a') "") :: Char
*** Exception: gunfold
I find this behavior counterintuitive. Therefore I propose to rename
StringRep to CharRep and mkStringConstr to mkCharConstr. For backwards
compatibility, this entails:
* Deprecating mkStringConstr and StringConstr
* Deprecating mkStringRep and StringRep
* Introducing mkCharConstr and CharConstr
* Introducing mkCharRep and CharRep
Additionally, due to deprecation warnings, the following have to change as
well:
* libraries/template-haskell/Language/Haskell/TH/Quote.hs
* compiler/utils/Serialized.hs
A patch is attached in #2875 (
http://hackage.haskell.org/trac/ghc/ticket/2875). I propose a discussion
period of 4 weeks, therefore until the 8th of January.
Thanks,
Pedro
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/generics/attachments/20081211/c4bef831/attachment.htm
More information about the Generics
mailing list