Difference between revisions of "CTRex"
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"