@@ -2,63 +2,44 @@ module Example.Complex where
22
33import Prelude
44
5- import Control.Monad.Eff (Eff )
6- import Control.Monad.Eff.Console (CONSOLE , logShow )
75import Control.Monad.Except (runExcept )
8-
9- import Foreign (F , Foreign , readArray , readBoolean , readNumber , readString , readNullOrUndefined )
10- import Foreign.Index ((!))
11- import Data.Traversable (traverse )
126import Data.Maybe (Maybe )
13-
7+ import Data.Traversable (traverse )
8+ import Effect (Effect )
9+ import Effect.Console (logShow )
1410import Example.Util.Value (foreignValue )
11+ import Foreign (F , Foreign , readArray , readBoolean , readNumber , readString , readNullOrUndefined )
12+ import Foreign.Index ((!))
1513
16- newtype SomeObject =
17- SomeObject
18- { foo :: String
19- , bar :: Boolean
20- , baz :: Number
21- , list :: Array ListItem
22- }
23-
24- instance showSomeObject :: Show SomeObject where
25- show (SomeObject o) =
26- " (SomeObject { foo: " <> show o.foo <>
27- " , bar: " <> show o.bar <>
28- " , baz: " <> show o.baz <>
29- " , list: " <> show o.list <>
30- " })"
14+ type SomeObject =
15+ { foo :: String
16+ , bar :: Boolean
17+ , baz :: Number
18+ , list :: Array ListItem
19+ }
3120
3221readSomeObject :: Foreign -> F SomeObject
3322readSomeObject value = do
3423 foo <- value ! " foo" >>= readString
3524 bar <- value ! " bar" >>= readBoolean
3625 baz <- value ! " baz" >>= readNumber
3726 list <- value ! " list" >>= readArray >>= traverse readListItem
38- pure $ SomeObject { foo, bar, baz, list }
39-
40- newtype ListItem =
41- ListItem
42- { x :: Number
43- , y :: Number
44- , z :: Maybe Number
45- }
27+ pure { foo, bar, baz, list }
4628
47- instance showListItem :: Show ListItem where
48- show (ListItem o) =
49- " (ListItem { x: " <> show o.x <>
50- " , y: " <> show o.y <>
51- " , z: " <> show o.z <>
52- " })"
29+ type ListItem =
30+ { x :: Number
31+ , y :: Number
32+ , z :: Maybe Number
33+ }
5334
5435readListItem :: Foreign -> F ListItem
5536readListItem value = do
5637 x <- value ! " x" >>= readNumber
5738 y <- value ! " y" >>= readNumber
5839 z <- value ! " z" >>= readNullOrUndefined >>= traverse readNumber
59- pure $ ListItem { x, y, z }
40+ pure { x, y, z }
6041
61- main :: Eff ( console :: CONSOLE ) Unit
42+ main :: Effect Unit
6243main = do
6344 let json = """ {"foo":"hello","bar":true,"baz":1,"list":[{"x":1,"y":2},{"x":3,"y":4,"z":999}]}"""
6445 logShow $ runExcept $ readSomeObject =<< foreignValue json
0 commit comments