git.iko.soy/rowtype-yoga/purescript-native
on adc70ed help sign in
58 lines 1.4 kB history raw
1-----------------------------------------------------------------------------
2--
3-- Module : Purescript.Types
4-- Copyright : (c) Phil Freeman 2013
5-- License : MIT
6--
7-- Maintainer : Phil Freeman <paf31@cantab.net>
8-- Stability : experimental
9-- Portability :
10--
11-- |
12--
13-----------------------------------------------------------------------------
15{-# LANGUAGE DeriveFunctor #-}
17module PureScript.Types (
18 Type (..),
19 Row(..)
20) where
22import Data.List (intercalate)
24data Type
25 = TUnknown Int
26 | Number
27 | String
28 | Boolean
29 | Array Type
30 | Object Row
31 | Function [Type] Type
32 | TypeVar String
33 | TypeConstructor String
34 | TypeApp Type Type
36data Row
37 = RUnknown Int
38 | RowVar String
39 | REmpty
40 | RCons String Type Row
42instance Show Type where
43 show (TUnknown _) = "?"
44 show Number = "Number"
45 show String = "String"
46 show Boolean = "Boolean"
47 show (Array t) = "[" ++ show t ++ "]"
48 show (Object row) = "{ " ++ show row ++ " }"
49 show (Function args ret) = "(" ++ intercalate ", " (map show args) ++ ") -> " ++ show ret
50 show (TypeVar v) = v
51 show (TypeConstructor c) = c
52 show (TypeApp t1 t2) = "(" ++ show t1 ++ ") (" ++ show t2 ++ ")"
54instance Show Row where
55 show (RUnknown _) = "?"
56 show REmpty = "{}"
57 show (RowVar v) = v
58 show (RCons name ty row) = name ++ " :: " ++ show ty ++ "; " ++ show row