git.iko.soy/rowtype-yoga/purescript-unique
on master help sign in
Data.Unique
commitc738def21c422cf954fcd48036028442be0edbd6 authormechairoi <ttsujikawa@gmail.com> dateSun 9 Aug 2015, 18:56 (11 years ago) parent8f3474b
6 files changed+191
MODULE.md+48 README.md+6 bower.json+23 gulpfile.js+52 package.json+18 src/Data/Unique.purs+44
MODULE.mdnew file+48
@@ -0,0 +1,48 @@
1+# Module Documentation
2+
3+## Module Data.Unique
4+
5+#### `Uniq`
6+
7+``` purescript
8+data Uniq :: !
9+```
10+
11+
12+#### `Unique`
13+
14+``` purescript
15+newtype Unique
16+```
17+
18+
19+#### `newUnique`
20+
21+``` purescript
22+newUnique :: forall e. Eff (uniq :: Uniq | e) Unique
23+```
24+
25+
26+#### `showUnique`
27+
28+``` purescript
29+instance showUnique :: Show Unique
30+```
31+
32+
33+#### `eqUnique`
34+
35+``` purescript
36+instance eqUnique :: Eq Unique
37+```
38+
39+
40+#### `ordUnique`
41+
42+``` purescript
43+instance ordUnique :: Ord Unique
44+```
45+
46+
47+
48+
README.mdnew file+6
@@ -0,0 +1,6 @@
1+purescript-unique [![Build Status](https://travis-ci.org/mechairoi/purescript-unique.svg?branch=master)](https://travis-ci.org/mechairoi/purescript-unique)
2+===
3+Data.Unique for PureScript.
4+
5+## Documentations
6+- [Module documentation](MODULE.md)
bower.jsonnew file+23
@@ -0,0 +1,23 @@
1+{
2+ "name": "purescript-unique",
3+ "version": "0.0.1",
4+ "homepage": "https://github.com/mechairoi/purescript-unique",
5+ "authors": [
6+ "mechairoi <ttsujikawa@gmail.com>"
7+ ],
8+ "keywords": [
9+ "purescript"
10+ ],
11+ "license": "MIT",
12+ "ignore": [
13+ "**/.*",
14+ "node_modules",
15+ "bower_components",
16+ "test",
17+ "tests"
18+ ],
19+ "dependencies": {
20+ },
21+ "devDependencies": {
22+ }
23+}
gulpfile.jsnew file+52
@@ -0,0 +1,52 @@
1+'use strict';
2+
3+var gulp = require('gulp')
4+ , run = require('gulp-run')
5+ , purescript = require('gulp-purescript')
6+ ;
7+
8+var paths = {
9+ src: 'src/**/*.purs',
10+ doc: 'MODULE.md',
11+ docSrc: ['src/**/*.purs', '!src/**/Internal/**/*.purs' ],
12+ bowerSrc: 'bower_components/purescript-*/src/**/*.purs',
13+ dest: 'output',
14+ example: 'examples/*.purs',
15+ test: 'test/**/*.purs'
16+};
17+
18+gulp.task('make', function() {
19+ return gulp.src([paths.src].concat(paths.bowerSrc))
20+ .pipe(purescript.pscMake({}))
21+ .pipe(gulp.dest(paths.dest));
22+});
23+
24+gulp.task('test-make', function() {
25+ return gulp.src([paths.src, paths.test].concat(paths.bowerSrc))
26+ .pipe(purescript.pscMake({}))
27+ .pipe(gulp.dest(paths.dest));
28+});
29+
30+gulp.task('test', ['test-make'], function() {
31+ var env = {};
32+ for (var e in process.env) env[e] = process.env[e];
33+ env.NODE_PATH = 'output';
34+ run('node -e "require(\'Test.Main\').main();"', { 'env': env }).exec();
35+});
36+
37+gulp.task('docs', function() {
38+ return gulp.src(paths.docSrc)
39+ .pipe(purescript.pscDocs())
40+ .pipe(gulp.dest(paths.doc));
41+});
42+
43+gulp.task('psci', function() {
44+ return gulp.src([paths.src, paths.test, paths.example].concat(paths.bowerSrc))
45+ .pipe(purescript.dotPsci());
46+});
47+
48+gulp.task('watch', function() {
49+ gulp.watch(paths.src, ['make', 'docs']);
50+});
51+
52+gulp.task('default', ['make', 'docs']);
package.jsonnew file+18
@@ -0,0 +1,18 @@
1+{
2+ "name": "purescript-unique",
3+ "version": "0.0.1",
4+ "description": "Data.Unique for PureScript",
5+ "dependencies": {
6+ "gulp-run": "^1.6.7"
7+ },
8+ "devDependencies": {
9+ "gulp": "^3.8.10",
10+ "gulp-purescript": "^0.3.1",
11+ "vinyl-source-stream": "^1.0.0"
12+ },
13+ "scripts": {
14+ "test": "gulp test",
15+ "make": "gulp make",
16+ "watch": "gulp watch"
17+ }
18+}
src/Data/Unique.pursnew file+44
@@ -0,0 +1,44 @@
1+module Data.Unique
2+ ( newUnique
3+ , Unique()
4+ , Uniq()
5+ ) where
6+
7+import Control.Monad.Eff
8+
9+foreign import data Uniq :: !
10+
11+newtype Unique = Unique String
12+
13+foreign import newUnique """
14+ var newUnique = (function() {
15+ var MAX_SAFE_INTEGER = 9007199254740991;
16+ var uniqueSource = [];
17+ function iter(i) {
18+ if(uniqueSource.length === i) {
19+ for(var j = 0; j < i; ++j) uniqueSource[j] = 0;
20+ uniqueSource[i] = 1;
21+ } else {
22+ if(uniqueSource[i] === MAX_SAFE_INTEGER) {
23+ uniqueSource[i] = 0;
24+ iter(i + 1);
25+ } else {
26+ uniqueSource[i]++;
27+ }
28+ }
29+ };
30+ return function() {
31+ iter(0);
32+ return uniqueSource.length === 1 ? (uniqueSource[0] + "") : uniqueSource.join(',');
33+ };
34+ })();""" :: forall e. Eff (uniq :: Uniq | e) Unique
35+
36+instance showUnique :: Show Unique where
37+ show (Unique a) = a
38+
39+instance eqUnique :: Eq Unique where
40+ (==) (Unique a) (Unique b) = a == b
41+ (/=) (Unique a) (Unique b) = a /= b
42+
43+instance ordUnique :: Ord Unique where
44+ compare (Unique a) (Unique b) = compare a b