Punning
It is common to see type definitions like the following:
The first occurrence of ChessPiece is a type, but the second is a value, namely a function of type Int -> Int -> ChessPiece. 
The name of the type and value don't have to be the same, but it's common to make this choice to avoid having to invent a new name like MkChessPiece. 
Punning and recursive types¶
There is even more potential for confusion when a type is recursive, so that the type can itself appear on the right hand side of its definition:
Here, the second occurrence of BinTree is a value, and the rest are types.
Common examples of punning¶
- (Bool, Int)is a type, but- (True, 4)is a value
- [Bool]is the type of lists of booleans, but- [True]is a value, a list with a single element.
- ()is a type, and contains a single value, also called- ().
- ReaderTis both to a type, and a value, the constructor for that type. Similarly for- ExceptT,- StateTand others
  
    
      Last update:
      January 12, 2023
      
        
Created: August 18, 2022
  
  
  Created: August 18, 2022