Unboxed type: Difference between revisions
mNo edit summary |
BrettGiles (talk | contribs) (Import from old HaWiki) |
||
Line 5: | Line 5: | ||
[[Category:Language]] | [[Category:Language]] | ||
==From the old Wiki== | |||
One might imagine numbers naively represented in Haskell "as pointer to a heap-allocated object which is either an unevaluated closure or is a "box" containing the number's actual value, which has now overwritten the closure" [3. below]. [[GHC]] (and other implementations?) allow direct access to the value inside the box, or "Unboxed" values. | |||
In GHC, by convention(?), unboxed values have a hash mark as a suffix to their name. For instance, the unboxed reprsentation of <code>42</code> is <code>42#</code>. There are some restrictions to their use. In particular, you can't pass them to polymorphic functions (like <hask>show</hask> for instance). | |||
In this example, <hask>I#</hask> is a constructor that takes an unboxed integer and returns the <hask>Int</hask> that we know and love. | |||
<haskell> | |||
module Main where | |||
import GHC.Exts | |||
showUnboxedInt :: Int# -> String | |||
showUnboxedInt n = (show $ I# n) ++ "#" | |||
</haskell> | |||
Here we wrap the unboxed Int <hask>n</hask> with the <hask>I#</hask> constructor and show the regular-old <hask>Int</hask>, whith a hash mark on the end. | |||
=== Unboxed Tuples and Arrays === | |||
... | |||
=== When to use Unboxed Types === | |||
... | |||
=== See Also === | |||
#See the [http://www.haskell.org/ghc/docs/latest/html/users_guide/primitives.html discussion on primitives] in the [http://www.haskell.org/ghc/docs/latest/html/users_guide/users-guide.html GHC's User's Guide]. | |||
#See the [http://haskell.cs.yale.edu/ghc/docs/latest/html/libraries/base/GHC.Exts.html GHC.Exts] module. | |||
#See SPJ's paper [http://research.microsoft.com/Users/simonpj/Papers/unboxed-values.ps.Z Unboxed values as first class citizens]. | |||
---- | |||
This page is a work in progress by IsaacJones. More input welcome :) |
Revision as of 03:39, 30 September 2006
Unboxed types are types that represent raw values. Unboxed types have kind #.
Note that unboxed types of different storage behaviours (four bytes, eight bytes etc.) are all lumped together under kind #. As a result, type variables must have kinds which are #-free.
From the old Wiki
One might imagine numbers naively represented in Haskell "as pointer to a heap-allocated object which is either an unevaluated closure or is a "box" containing the number's actual value, which has now overwritten the closure" [3. below]. GHC (and other implementations?) allow direct access to the value inside the box, or "Unboxed" values.
In GHC, by convention(?), unboxed values have a hash mark as a suffix to their name. For instance, the unboxed reprsentation of 42
is 42#
. There are some restrictions to their use. In particular, you can't pass them to polymorphic functions (like show
for instance).
In this example, I#
is a constructor that takes an unboxed integer and returns the Int
that we know and love.
module Main where
import GHC.Exts
showUnboxedInt :: Int# -> String
showUnboxedInt n = (show $ I# n) ++ "#"
Here we wrap the unboxed Int n
with the I#
constructor and show the regular-old Int
, whith a hash mark on the end.
Unboxed Tuples and Arrays
...
When to use Unboxed Types
...
See Also
- See the discussion on primitives in the GHC's User's Guide.
- See the GHC.Exts module.
- See SPJ's paper Unboxed values as first class citizens.
This page is a work in progress by IsaacJones. More input welcome :)