39 lines
787 B
Markdown
39 lines
787 B
Markdown
|
+++
|
||
|
title = "`type`"
|
||
|
weight = 1
|
||
|
+++
|
||
|
|
||
|
Defines a type synonym. These are used purely for readability, *i.e.,* a
|
||
|
type synonym can always be "expanded out" to its definition at any time.
|
||
|
|
||
|
```
|
||
|
topDefn ::= type typeId {tyVarId }= type
|
||
|
```
|
||
|
|
||
|
Examples:
|
||
|
|
||
|
```hs
|
||
|
type Byte = Bit 8
|
||
|
type Word = Bit 16
|
||
|
type LongWord = Bit 32
|
||
|
```
|
||
|
|
||
|
These provide commonly used names for certain bit lengths. In a
|
||
|
specification of a processor:
|
||
|
|
||
|
```hs
|
||
|
data RegName = R0 | R1 | ... | R31
|
||
|
type Rdest = RegName
|
||
|
type Rsrc = RegName
|
||
|
data ArithInstr = Add Rdest Rsrc Rsrc
|
||
|
| Sub Rdest Rsrc Rsrc
|
||
|
```
|
||
|
|
||
|
the last two lines suggest the roles of the registers in the
|
||
|
instructions, and is more readable than:
|
||
|
|
||
|
```hs
|
||
|
data ArithInstr = Add RegName RegName RegName
|
||
|
| Sub RegName RegName RegName
|
||
|
```
|