Personal tools

Unboxed type

From HaskellWiki

Revision as of 03:39, 30 September 2006 by BrettGiles (Talk | contribs)

Jump to: navigation, search

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.


1 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
for instance). In this example,
is a constructor that takes an unboxed integer and returns the
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
with the
constructor and show the regular-old
, whith a hash mark on the end.

1.1 Unboxed Tuples and Arrays


1.2 When to use Unboxed Types


1.3 See Also

  1. See the discussion on primitives in the GHC's User's Guide.
  2. See the GHC.Exts module.
  3. See SPJ's paper Unboxed values as first class citizens.

This page is a work in progress by IsaacJones. More input welcome :)