
So, in order not to have to rely on rewrite rules, would it be a good idea to add unpackCString to the IsString class?
import GHC.Base (unpackCString#, Addr#)
class IsString a where
fromString :: String -> a
unpackCString :: Addr# -> a
unpackCString addr = fromString (unpackCString# addr)
For lists something similar could probably be done.
Sjoerd
On Sep 25, 2012, at 10:01 AM, Simon Peyton-Jones
| Here at the University of Tübingen, I am co-supervising (together with | Jeroen Weijers) a student project implementing the OverloadedLists | extension for GHC. Achim Krause is the student who is working on the | project. We took into consideration earlier discussions on this topic | [1,2] before embarking on the project. | | Achim has worked on two approaches.
Your second approach is this:
| [x,y,z] | | as | | singleton x `mappend` singleton y `mappend` singleton z ;
This approach is not good for long literal lists, because you get tons of executable code where the user thought he was just defining a data structure. And long literal lists are an important use-case.
One other possibility is to use a variant of what GHC does for literal strings. Currently "foo" turns into unpackCString "foo"# where "foo"# is a statically allocate C string, and the "unpackCString" unpacks it lazily.
Maybe we could make a literal [a,b.c] turn into unpack [a,b,c]# where [a,b,c]# is a statically-allocated vector? See http://hackage.haskell.org/trac/ghc/ticket/5218, which is stalled awaiting brain cycles from someone.
I'm maxed out at the moment. I'd be very happy if you guys were able to make progress; I'm happy to advise. Open a ticket, start a wiki page, etc!
Simon
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe