Difference between revisions of "CTRex"

From HaskellWiki
Jump to navigation Jump to search
Line 4: Line 4:
   
 
CTRex is a library for Haskell which implements extensible records using closed type families and type literals. It does '''not''' use overlapping instances.
 
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:
  +
<code> { x = 0 , y = "bla", z = False } </code>
  +
  +
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>
  +
  +
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>
  +
<code> y = Label :: Label "y" </code>
  +
<code> z = Label :: Label "z" </code>

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"