11module Test.Instances where
22
3- import Prelude (class Eq , class Show , bind , pure , ($))
4- import Data.Foreign (ForeignError (..), fail , readString )
5- import Data.Foreign.Class (class IsForeign , readProp )
3+ import Prelude (class Eq , class Show , bind , pure , ($), (=<<), (<$>), map , (<=<))
4+ import Data.Traversable (traverse )
5+ import Data.Foreign (readArray , readNumber , readString , readInt , F , Foreign , ForeignError (..), fail , readString )
6+ import Data.Foreign.Index (readProp )
67import Data.Generic (class Generic , gShow , gEq )
78import Data.YAML.Foreign.Encode
89
@@ -32,28 +33,28 @@ derive instance genericMobility :: Generic Mobility
3233instance showMobility :: Show Mobility where show = gShow
3334instance eqMobility :: Eq Mobility where eq = gEq
3435
35- instance archiObjectIsForeign :: IsForeign GeoObject where
36- read value = do
37- name <- readProp " Name" value
38- scale <- readProp " Scale" value
39- points <- readProp " Points" value
40- mobility <- readProp " Mobility" value
41- coverage <- readProp " Coverage" value
42- pure $ GeoObject { name, scale, points, mobility, coverage }
36+ readGeoObject :: Foreign -> F GeoObject
37+ readGeoObject value = do
38+ name <- readString =<< readProp " Name" value
39+ scale <- readNumber =<< readProp " Scale" value
40+ points <- traverse readPoint =<< readArray =<< readProp " Points" value
41+ mobility <- readMobility =<< readProp " Mobility" value
42+ coverage <- readNumber =<< readProp " Coverage" value
43+ pure $ GeoObject { name, scale, points, mobility, coverage }
4344
44- instance pointIsForeign :: IsForeign Point where
45- read value = do
46- x <- readProp " X" value
47- y <- readProp " Y" value
48- pure $ Point x y
45+ readPoint :: Foreign -> F Point
46+ readPoint value = do
47+ x <- readInt =<< readProp " X" value
48+ y <- readInt =<< readProp " Y" value
49+ pure $ Point x y
4950
50- instance mobilityIsForeign :: IsForeign Mobility where
51- read value = do
52- mob <- readString value
53- case mob of
54- " Fix" -> pure Fix
55- " Flex" -> pure Flex
56- _ -> fail $ JSONError " Mobility must be either Flex or Fix"
51+ readMobility :: Foreign -> F Mobility
52+ readMobility value = do
53+ mob <- readString value
54+ case mob of
55+ " Fix" -> pure Fix
56+ " Flex" -> pure Flex
57+ _ -> fail $ JSONError " Mobility must be either Flex or Fix"
5758
5859instance pointToYAML :: ToYAML Point where
5960 toYAML (Point x y) =
@@ -75,4 +76,3 @@ instance archiObjectToYAML :: ToYAML GeoObject where
7576 , " Mobility" := o.mobility
7677 , " Coverage" := o.coverage
7778 ]
78-
0 commit comments