Optimisation of unpackCString#

Simon Peyton-Jones simonpj at microsoft.com
Tue Apr 29 06:29:36 EDT 2008

| I could imagine adding two rules to the simplifier:
| case unpackCString# "" of  ==> case [] of
| case unpackCString# "xyz" of ==> case (C# 'x': unpackCString# "yz") of
| This goes back to an old gripe of mine actually -- we can't get
| at the length of a C string literal at compile time either, which
| would be super useful in rules.
| If we had some light primitives for this, that GHC new about (head#,
| length#), that accessed the internal data about what strings are up to,
| that could be useful.

Don, Neil

Can you two be very concrete about what you'd like?  This stuff is very like constant folding.  GHC knows about
        1# +# 2#
so it could reasonably know about
        length# "foo"
        length# :: CString -> Int
or whatever.

Both Neil's suggestion and the above look do-able.  But I'd like a clear spec first.  There is a slight tension between what is "built-in magic" for primitive types (in this case CString), and what is general purpose stuff.  I don't think there is anything wrong with magic for primitive types, but if there is a useful general-purpose mechanism trying to get out, let's liberate it.


More information about the Glasgow-haskell-users mailing list