Difference between revisions of "CTRex"

From HaskellWiki
Jump to navigation Jump to search
Line 12: Line 12:
 
Labels (such as x,y and z) in CTRex are type level symbols (i.e. type level strings). We can point to a label by using the label type:
 
Labels (such as x,y and z) in CTRex are type level symbols (i.e. type level strings). We can point to a label by using the label type:
   
<code>data Label (s :: Symbol) = Label</code>
+
<haskell>data Label (s :: Symbol) = Label</haskell>
   
 
For example, we can declare shorthands for pointing at the type level symbol "x", "y" and "z" as follows.
 
For example, we can declare shorthands for pointing at the type level symbol "x", "y" and "z" as follows.
   
<code> x = Label :: Label "x" </code>
+
<haskell> x = Label :: Label "x"
<code> y = Label :: Label "y" </code>
+
y = Label :: Label "y"
<code> z = Label :: Label "z" </code>
+
z = Label :: Label "z" </haskell>

Revision as of 16:13, 4 December 2013

Introduction

This page will describe the design, usage and motivation for CTRex.

CTRex is a library for Haskell which implements extensible records using closed type families and type literals. It does not use overlapping instances.

What are extensible records?

A record is just a collection of label-value pairs. For example: { x = 0 , y = "bla", z = False }

Labels (such as x,y and z) in CTRex are type level symbols (i.e. type level strings). We can point to a label by using the label type:

data Label (s :: Symbol) = Label

For example, we can declare shorthands for pointing at the type level symbol "x", "y" and "z" as follows.

 x = Label :: Label "x" 
y = Label :: Label "y" 
z = Label :: Label "z"