Skip to content

Commit 55d1b40

Browse files
committed
Updates for RC
1 parent 2589ee7 commit 55d1b40

File tree

7 files changed

+201
-207
lines changed

7 files changed

+201
-207
lines changed

Gruntfile.js

Lines changed: 0 additions & 42 deletions
This file was deleted.

README.md

Lines changed: 7 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -1,154 +1,15 @@
1-
# Module Documentation
1+
# purescript-enums
22

3-
## Module Data.Enum
3+
[![Build Status](https://travis-ci.org/purescript/purescript-enums.svg?branch=master)](https://travis-ci.org/purescript/purescript-enums)
44

5-
#### `Cardinality`
5+
Operations for small ordered sum types.
66

7-
``` purescript
8-
newtype Cardinality a
9-
= Cardinality Int
10-
```
11-
12-
13-
#### `runCardinality`
14-
15-
``` purescript
16-
runCardinality :: forall a. Cardinality a -> Int
17-
```
18-
19-
20-
#### `Enum`
21-
22-
``` purescript
23-
class (Bounded a) <= Enum a where
24-
cardinality :: Cardinality a
25-
succ :: a -> Maybe a
26-
pred :: a -> Maybe a
27-
toEnum :: Int -> Maybe a
28-
fromEnum :: a -> Int
29-
```
30-
31-
Type class for enumerations. This should not be considered a part of a
32-
numeric hierarchy, ala Haskell. Rather, this is a type class for small,
33-
ordered sum types with statically-determined cardinality and the ability
34-
to easily compute successor and predecessor elements. e.g. `DayOfWeek`, etc.
35-
36-
Laws:
37-
38-
- ```succ bottom >>= succ >>= succ ... succ [cardinality - 1 times] == top```
39-
- ```pred top >>= pred >>= pred ... pred [cardinality - 1 times] == bottom```
40-
- ```e1 `compare` e2 == fromEnum e1 `compare` fromEnum e2```
41-
- ```forall a > bottom: pred a >>= succ == Just a```
42-
- ```forall a < top: succ a >>= pred == Just a```
43-
- ```pred >=> succ >=> pred = pred```
44-
- ```succ >=> pred >=> succ = succ```
45-
- ```toEnum (fromEnum a) = Just a```
46-
- ```forall a > bottom: fromEnum <$> pred a = Just (fromEnum a - 1)```
47-
- ```forall a < top: fromEnum <$> succ a = Just (fromEnum a + 1)```
7+
## Installation
488

49-
#### `defaultSucc`
50-
51-
``` purescript
52-
defaultSucc :: forall a. (Int -> Maybe a) -> (a -> Int) -> a -> Maybe a
539
```
54-
55-
```defaultSucc toEnum fromEnum = succ```
56-
57-
#### `defaultPred`
58-
59-
``` purescript
60-
defaultPred :: forall a. (Int -> Maybe a) -> (a -> Int) -> a -> Maybe a
10+
bower install purescript-enums
6111
```
6212

63-
```defaultPred toEnum fromEnum = pred```
64-
65-
#### `defaultToEnum`
66-
67-
``` purescript
68-
defaultToEnum :: forall a. (a -> Maybe a) -> a -> Int -> Maybe a
69-
```
70-
71-
Runs in `O(n)` where `n` is `fromEnum a`
72-
73-
```defaultToEnum succ bottom = toEnum```
74-
75-
#### `defaultFromEnum`
76-
77-
``` purescript
78-
defaultFromEnum :: forall a. (a -> Maybe a) -> a -> Int
79-
```
80-
81-
Runs in `O(n)` where `n` is `fromEnum a`
82-
83-
```defaultFromEnum pred = fromEnum```
84-
85-
#### `enumFromTo`
86-
87-
``` purescript
88-
enumFromTo :: forall a. (Enum a) => a -> a -> [a]
89-
```
90-
91-
Property: ```fromEnum a = a', fromEnum b = b' => forall e', a' <= e' <= b': Exists e: toEnum e' = Just e```
92-
93-
Following from the propery of `intFromTo`, we are sure all elements in `intFromTo (fromEnum a) (fromEnum b)` are `Just`s.
94-
95-
#### `enumFromThenTo`
96-
97-
``` purescript
98-
enumFromThenTo :: forall a. (Enum a) => a -> a -> a -> [a]
99-
```
100-
101-
`[a,b..c]`
102-
103-
Correctness for using `fromJust` is the same as for `enumFromTo`.
104-
105-
#### `intFromTo`
106-
107-
``` purescript
108-
intFromTo :: Int -> Int -> [Int]
109-
```
110-
111-
Property: ```forall e in intFromTo a b: a <= e <= b```
112-
113-
#### `intStepFromTo`
114-
115-
``` purescript
116-
intStepFromTo :: Int -> Int -> Int -> [Int]
117-
```
118-
119-
Property: ```forall e in intStepFromTo step a b: a <= e <= b```
120-
121-
#### `enumChar`
122-
123-
``` purescript
124-
instance enumChar :: Enum Char
125-
```
126-
127-
## Instances
128-
129-
#### `enumMaybe`
130-
131-
``` purescript
132-
instance enumMaybe :: (Enum a) => Enum (Maybe a)
133-
```
134-
135-
136-
#### `enumBoolean`
137-
138-
``` purescript
139-
instance enumBoolean :: Enum Boolean
140-
```
141-
142-
143-
#### `enumTuple`
144-
145-
``` purescript
146-
instance enumTuple :: (Enum a, Enum b) => Enum (Tuple a b)
147-
```
148-
149-
150-
#### `enumEither`
13+
## Module documentation
15114

152-
``` purescript
153-
instance enumEither :: (Enum a, Enum b) => Enum (Either a b)
154-
```
15+
- [Data.Enum](docs/Data.Enum.md)

bower.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,23 @@
66
"purescript"
77
],
88
"license": "MIT",
9+
"repository": {
10+
"type": "git",
11+
"url": "git://github.com/purescript/purescript-enums.git"
12+
},
913
"ignore": [
1014
"**/.*",
1115
"bower_components",
1216
"node_modules",
1317
"output",
14-
"tests",
15-
"tmp",
18+
"test",
1619
"bower.json",
17-
"Gruntfile.js",
20+
"gulpfile.js",
1821
"package.json"
1922
],
2023
"dependencies": {
21-
"purescript-integers": "~0.2.0",
22-
"purescript-maybe": "~0.3.0",
23-
"purescript-tuples": "~0.4.0",
24-
"purescript-either": "~0.2.0",
25-
"purescript-strings": "~0.5.0",
26-
"purescript-unfoldable": "~0.4.0"
24+
"purescript-either": "^0.2.0",
25+
"purescript-strings": "^0.5.0",
26+
"purescript-unfoldable": "^0.4.0"
2727
}
2828
}

docs/Data.Enum.md

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
## Module Data.Enum
2+
3+
#### `Cardinality`
4+
5+
``` purescript
6+
newtype Cardinality a
7+
= Cardinality Int
8+
```
9+
10+
#### `runCardinality`
11+
12+
``` purescript
13+
runCardinality :: forall a. Cardinality a -> Int
14+
```
15+
16+
#### `Enum`
17+
18+
``` purescript
19+
class (Bounded a) <= Enum a where
20+
cardinality :: Cardinality a
21+
succ :: a -> Maybe a
22+
pred :: a -> Maybe a
23+
toEnum :: Int -> Maybe a
24+
fromEnum :: a -> Int
25+
```
26+
27+
Type class for enumerations. This should not be considered a part of a
28+
numeric hierarchy, ala Haskell. Rather, this is a type class for small,
29+
ordered sum types with statically-determined cardinality and the ability
30+
to easily compute successor and predecessor elements. e.g. `DayOfWeek`, etc.
31+
32+
Laws:
33+
34+
- ```succ bottom >>= succ >>= succ ... succ [cardinality - 1 times] == top```
35+
- ```pred top >>= pred >>= pred ... pred [cardinality - 1 times] == bottom```
36+
- ```e1 `compare` e2 == fromEnum e1 `compare` fromEnum e2```
37+
- ```forall a > bottom: pred a >>= succ == Just a```
38+
- ```forall a < top: succ a >>= pred == Just a```
39+
- ```pred >=> succ >=> pred = pred```
40+
- ```succ >=> pred >=> succ = succ```
41+
- ```toEnum (fromEnum a) = Just a```
42+
- ```forall a > bottom: fromEnum <$> pred a = Just (fromEnum a - 1)```
43+
- ```forall a < top: fromEnum <$> succ a = Just (fromEnum a + 1)```
44+
45+
##### Instances
46+
``` purescript
47+
instance enumChar :: Enum Char
48+
instance enumMaybe :: (Enum a) => Enum (Maybe a)
49+
instance enumBoolean :: Enum Boolean
50+
instance enumTuple :: (Enum a, Enum b) => Enum (Tuple a b)
51+
instance enumEither :: (Enum a, Enum b) => Enum (Either a b)
52+
```
53+
54+
#### `defaultSucc`
55+
56+
``` purescript
57+
defaultSucc :: forall a. (Int -> Maybe a) -> (a -> Int) -> a -> Maybe a
58+
```
59+
60+
```defaultSucc toEnum fromEnum = succ```
61+
62+
#### `defaultPred`
63+
64+
``` purescript
65+
defaultPred :: forall a. (Int -> Maybe a) -> (a -> Int) -> a -> Maybe a
66+
```
67+
68+
```defaultPred toEnum fromEnum = pred```
69+
70+
#### `defaultToEnum`
71+
72+
``` purescript
73+
defaultToEnum :: forall a. (a -> Maybe a) -> a -> Int -> Maybe a
74+
```
75+
76+
Runs in `O(n)` where `n` is `fromEnum a`
77+
78+
```defaultToEnum succ bottom = toEnum```
79+
80+
#### `defaultFromEnum`
81+
82+
``` purescript
83+
defaultFromEnum :: forall a. (a -> Maybe a) -> a -> Int
84+
```
85+
86+
Runs in `O(n)` where `n` is `fromEnum a`
87+
88+
```defaultFromEnum pred = fromEnum```
89+
90+
#### `enumFromTo`
91+
92+
``` purescript
93+
enumFromTo :: forall a. (Enum a) => a -> a -> Array a
94+
```
95+
96+
Property: ```fromEnum a = a', fromEnum b = b' => forall e', a' <= e' <= b': Exists e: toEnum e' = Just e```
97+
98+
Following from the propery of `intFromTo`, we are sure all elements in `intFromTo (fromEnum a) (fromEnum b)` are `Just`s.
99+
100+
#### `enumFromThenTo`
101+
102+
``` purescript
103+
enumFromThenTo :: forall a. (Enum a) => a -> a -> a -> Array a
104+
```
105+
106+
`[a,b..c]`
107+
108+
Correctness for using `fromJust` is the same as for `enumFromTo`.
109+
110+
#### `intFromTo`
111+
112+
``` purescript
113+
intFromTo :: Int -> Int -> Array Int
114+
```
115+
116+
Property: ```forall e in intFromTo a b: a <= e <= b```
117+
118+
#### `intStepFromTo`
119+
120+
``` purescript
121+
intStepFromTo :: Int -> Int -> Int -> Array Int
122+
```
123+
124+
Property: ```forall e in intStepFromTo step a b: a <= e <= b```
125+
126+

0 commit comments

Comments
 (0)