Skip to content

Commit 47fb251

Browse files
authored
Merge pull request #60 from purescript/ps-0.11
Update for PureScript 0.11
2 parents dd7a14c + a6befc6 commit 47fb251

32 files changed

+287
-530
lines changed

.eslintrc.json

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"parserOptions": {
3+
"ecmaVersion": 5
4+
},
5+
"extends": "eslint:recommended",
6+
"env": {
7+
"commonjs": true
8+
},
9+
"rules": {
10+
"strict": [2, "global"],
11+
"block-scoped-var": 2,
12+
"consistent-return": 2,
13+
"eqeqeq": [2, "smart"],
14+
"guard-for-in": 2,
15+
"no-caller": 2,
16+
"no-extend-native": 2,
17+
"no-loop-func": 2,
18+
"no-new": 2,
19+
"no-param-reassign": 2,
20+
"no-return-assign": 2,
21+
"no-unused-expressions": 2,
22+
"no-use-before-define": 2,
23+
"radix": [2, "always"],
24+
"indent": [2, 2],
25+
"quotes": [2, "double"],
26+
"semi": [2, "always"]
27+
}
28+
}

.gitignore

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
/.*
22
!/.gitignore
3-
!/.jscsrc
4-
!/.jshintrc
3+
!/.eslintrc.json
54
!/.travis.yml
65
/bower_components/
76
/node_modules/

.jscsrc

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

.jshintrc

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

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
language: node_js
22
dist: trusty
33
sudo: required
4-
node_js: 6
4+
node_js: stable
55
env:
66
- PATH=$HOME/purescript:$PATH
77
install:

bower.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,16 @@
2121
"package.json"
2222
],
2323
"dependencies": {
24-
"purescript-arrays": "^3.0.0",
25-
"purescript-either": "^2.0.0",
26-
"purescript-foldable-traversable": "^2.0.0",
27-
"purescript-functions": "^2.0.0",
28-
"purescript-integers": "^2.0.0",
29-
"purescript-lists": "^3.0.0",
30-
"purescript-strings": "^2.0.0",
31-
"purescript-transformers": "^2.0.0"
24+
"purescript-arrays": "^4.0.0",
25+
"purescript-either": "^3.0.0",
26+
"purescript-foldable-traversable": "^3.0.0",
27+
"purescript-functions": "^3.0.0",
28+
"purescript-integers": "^3.0.0",
29+
"purescript-lists": "^4.0.0",
30+
"purescript-strings": "^3.0.0",
31+
"purescript-transformers": "^3.0.0"
3232
},
3333
"devDependencies": {
34-
"purescript-console": "^2.0.0"
34+
"purescript-console": "^3.0.0"
3535
}
3636
}

examples/Applicative.purs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,24 @@ import Control.Monad.Eff (Eff)
66
import Control.Monad.Eff.Console (CONSOLE, logShow)
77
import Control.Monad.Except (runExcept)
88

9-
import Data.Foreign (F)
10-
import Data.Foreign.Class (class IsForeign, readJSON, readProp)
9+
import Data.Foreign (F, Foreign, readNumber)
10+
import Data.Foreign.Index ((!))
11+
12+
import Example.Util.Value (foreignValue)
1113

1214
data Point = Point Number Number Number
1315

1416
instance showPoint :: Show Point where
1517
show (Point x y z) = "(Point " <> show [x, y, z] <> ")"
1618

17-
instance pointIsForeign :: IsForeign Point where
18-
read value = Point <$> readProp "x" value
19-
<*> readProp "y" value
20-
<*> readProp "z" value
19+
readPoint :: Foreign -> F Point
20+
readPoint value = do
21+
Point
22+
<$> (value ! "x" >>= readNumber)
23+
<*> (value ! "y" >>= readNumber)
24+
<*> (value ! "z" >>= readNumber)
2125

2226
main :: Eff (console :: CONSOLE) Unit
23-
main = logShow $ runExcept $
24-
readJSON """{ "x": 1, "y": 2, "z": 3 }""" :: F Point
27+
main =
28+
logShow $ runExcept $
29+
readPoint =<< foreignValue """{ "x": 1, "y": 2, "z": 3 }"""

examples/Arrays.purs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
module Example.Arrays where
2+
3+
import Prelude
4+
5+
import Control.Monad.Eff (Eff)
6+
import Control.Monad.Eff.Console (CONSOLE, logShow)
7+
import Control.Monad.Except (runExcept)
8+
9+
import Data.Foreign (readArray, readNumber, readString)
10+
import Data.Traversable (traverse)
11+
12+
import Example.Util.Value (foreignValue)
13+
14+
main :: Eff (console :: CONSOLE) Unit
15+
main = do
16+
logShow $ runExcept $
17+
traverse readString =<< readArray =<< foreignValue """["hello", "world"]"""
18+
logShow $ runExcept $
19+
traverse readNumber =<< readArray =<< foreignValue """[1, 2, 3, 4]"""

examples/Complex.purs

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,35 +6,43 @@ import Control.Monad.Eff (Eff)
66
import Control.Monad.Eff.Console (CONSOLE, logShow)
77
import Control.Monad.Except (runExcept)
88

9-
import Data.Foreign (F)
10-
import Data.Foreign.Class (class IsForeign, readJSON, readProp)
11-
import Data.Foreign.NullOrUndefined (unNullOrUndefined)
9+
import Data.Foreign (F, Foreign, readArray, readBoolean, readNumber, readString, readNullOrUndefined)
10+
import Data.Foreign.Index ((!))
11+
import Data.Traversable (traverse)
1212
import Data.Maybe (Maybe)
1313

14-
data SomeObject = SomeObject { foo :: String
15-
, bar :: Boolean
16-
, baz :: Number
17-
, list :: Array ListItem }
14+
import Example.Util.Value (foreignValue)
15+
16+
newtype SomeObject =
17+
SomeObject
18+
{ foo :: String
19+
, bar :: Boolean
20+
, baz :: Number
21+
, list :: Array ListItem
22+
}
1823

1924
instance showSomeObject :: Show SomeObject where
2025
show (SomeObject o) =
2126
"(SomeObject { foo: " <> show o.foo <>
2227
", bar: " <> show o.bar <>
2328
", baz: " <> show o.baz <>
2429
", list: " <> show o.list <>
25-
" })"
30+
"})"
2631

27-
instance objectIsForeign :: IsForeign SomeObject where
28-
read value = do
29-
foo <- readProp "foo" value
30-
bar <- readProp "bar" value
31-
baz <- readProp "baz" value
32-
list <- readProp "list" value
33-
pure $ SomeObject { foo: foo, bar: bar, baz: baz, list: list }
32+
readSomeObject :: Foreign -> F SomeObject
33+
readSomeObject value = do
34+
foo <- value ! "foo" >>= readString
35+
bar <- value ! "bar" >>= readBoolean
36+
baz <- value ! "baz" >>= readNumber
37+
list <- value ! "list" >>= readArray >>= traverse readListItem
38+
pure $ SomeObject { foo, bar, baz, list }
3439

35-
data ListItem = ListItem { x :: Number
36-
, y :: Number
37-
, z :: Maybe Number }
40+
newtype ListItem =
41+
ListItem
42+
{ x :: Number
43+
, y :: Number
44+
, z :: Maybe Number
45+
}
3846

3947
instance showListItem :: Show ListItem where
4048
show (ListItem o) =
@@ -43,14 +51,14 @@ instance showListItem :: Show ListItem where
4351
", z: " <> show o.z <>
4452
" })"
4553

46-
instance listItemIsForeign :: IsForeign ListItem where
47-
read value = do
48-
x <- readProp "x" value
49-
y <- readProp "y" value
50-
z <- unNullOrUndefined <$> readProp "z" value
51-
pure $ ListItem { x: x, y: y, z: z }
54+
readListItem :: Foreign -> F ListItem
55+
readListItem value = do
56+
x <- value ! "x" >>= readNumber
57+
y <- value ! "y" >>= readNumber
58+
z <- value ! "z" >>= readNullOrUndefined >>= traverse readNumber
59+
pure $ ListItem { x, y, z }
5260

5361
main :: Eff (console :: CONSOLE) Unit
5462
main = do
5563
let json = """{"foo":"hello","bar":true,"baz":1,"list":[{"x":1,"y":2},{"x":3,"y":4,"z":999}]}"""
56-
logShow $ runExcept $ readJSON json :: F SomeObject
64+
logShow $ runExcept $ readSomeObject =<< foreignValue json

examples/Either.purs

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

0 commit comments

Comments
 (0)