git.iko.soy/rowtype-yoga/purescript-native
on 2bfb486 help sign in
60 lines 1.3 kB history raw
1-----------------------------------------------------------------------------
2--
3-- Module : Language.PureScript.Kinds
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 DeriveDataTypeable #-}
17module Language.PureScript.Kinds where
19import Data.Data
21import Control.Monad.Unify (Unknown)
23-- |
24-- The data type of kinds
25--
26data Kind
27 -- |
28 -- Unification variable of type Kind
29 --
30 = KUnknown Unknown
31 -- |
32 -- The kind of types
33 --
34 | Star
35 -- |
36 -- The kind of effects
37 --
38 | Bang
39 -- |
40 -- Kinds for labelled, unordered rows without duplicates
41 --
42 | Row Kind
43 -- |
44 -- Function kinds
45 --
46 | FunKind Kind Kind deriving (Show, Eq, Data, Typeable)
48everywhereOnKinds :: (Kind -> Kind) -> Kind -> Kind
49everywhereOnKinds f = go
50 where
51 go (Row k1) = f (Row (go k1))
52 go (FunKind k1 k2) = f (FunKind (go k1) (go k2))
53 go other = f other
55everythingOnKinds :: (r -> r -> r) -> (Kind -> r) -> Kind -> r
56everythingOnKinds (<>) f = go
57 where
58 go k@(Row k1) = f k <> go k1
59 go k@(FunKind k1 k2) = f k <> go k1 <> go k2
60 go other = f other