Skip to content

Commit beb5873

Browse files
authored
Merge pull request #30 from garyb/lenses
Add lenses
2 parents 783df3b + 9942cf6 commit beb5873

File tree

8 files changed

+127
-8
lines changed

8 files changed

+127
-8
lines changed

bower.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323
"purescript-pathy": "^4.0.0",
2424
"purescript-string-parsers": "^3.0.0",
2525
"purescript-unfoldable": "^3.0.0",
26-
"purescript-generics-rep": "^5.2.0"
26+
"purescript-generics-rep": "^5.2.0",
27+
"purescript-profunctor-lenses": "^3.7.0"
2728
},
2829
"devDependencies": {
2930
"purescript-test-unit": "11.0.0",

src/Data/URI/AbsoluteURI.purs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ import Prelude
44

55
import Data.Array (catMaybes)
66
import Data.Either (Either)
7+
import Data.Lens (Lens', lens)
78
import Data.Maybe (Maybe(..))
89
import Data.String as S
9-
import Data.URI (AbsoluteURI(..))
10+
import Data.URI (AbsoluteURI(..), HierarchicalPart, Query, Scheme)
1011
import Data.URI.HierarchicalPart as HPart
1112
import Data.URI.Query as Query
1213
import Data.URI.Scheme as Scheme
@@ -31,3 +32,21 @@ print (AbsoluteURI s h q) =
3132
, Just (HPart.print h)
3233
, Query.print <$> q
3334
]
35+
36+
_scheme Lens' AbsoluteURI (Maybe Scheme)
37+
_scheme =
38+
lens
39+
(\(AbsoluteURI s _ _) → s)
40+
(\(AbsoluteURI _ h q) s → AbsoluteURI s h q)
41+
42+
_hierPart Lens' AbsoluteURI HierarchicalPart
43+
_hierPart =
44+
lens
45+
(\(AbsoluteURI _ h _) → h)
46+
(\(AbsoluteURI s _ q) h → AbsoluteURI s h q)
47+
48+
_query Lens' AbsoluteURI (Maybe Query)
49+
_query =
50+
lens
51+
(\(AbsoluteURI _ _ q) → q)
52+
(\(AbsoluteURI s h _) q → AbsoluteURI s h q)

src/Data/URI/Authority.purs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ module Data.URI.Authority where
33
import Prelude
44

55
import Data.Array (fromFoldable)
6-
import Data.Maybe (maybe)
6+
import Data.Lens (Lens', lens)
7+
import Data.Maybe (Maybe, maybe)
78
import Data.String as S
89
import Data.Tuple (Tuple(..))
9-
import Data.URI (Authority(..))
10+
import Data.URI (Authority(..), Host, Port, UserInfo)
1011
import Data.URI.Host as Host
1112
import Data.URI.Port as Port
1213
import Data.URI.UserInfo as UserInfo
@@ -29,3 +30,15 @@ print (Authority ui hs) =
2930
maybe "" (\u → UserInfo.print u <> "@") ui
3031
printHostAndPort (Tuple h p) =
3132
Host.print h <> maybe "" (\n → ":" <> Port.print n) p
33+
34+
_userInfo Lens' Authority (Maybe UserInfo)
35+
_userInfo =
36+
lens
37+
(\(Authority ui _) → ui)
38+
(\(Authority _ hs) ui → Authority ui hs)
39+
40+
_hosts Lens' Authority (Array (Tuple Host (Maybe Port)))
41+
_hosts =
42+
lens
43+
(\(Authority _ hs) → hs)
44+
(\(Authority ui _) hs → Authority ui hs)

src/Data/URI/HierarchicalPart.purs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ import Prelude
44

55
import Control.Alt ((<|>))
66
import Data.Array (catMaybes)
7+
import Data.Lens (Lens', lens)
78
import Data.Maybe (Maybe(..))
89
import Data.String as S
9-
import Data.URI (HierarchicalPart(..))
10+
import Data.URI (Authority, HierarchicalPart(..), URIPathAbs)
1011
import Data.URI.Authority as Authority
1112
import Data.URI.Path (printPath, parseURIPathAbs, parsePathRootless, parsePathAbsolute, parsePathAbEmpty)
1213
import Text.Parsing.StringParser (Parser)
@@ -29,3 +30,15 @@ parser = withAuth <|> withoutAuth
2930
print HierarchicalPart String
3031
print (HierarchicalPart a p) =
3132
S.joinWith "" (catMaybes [Authority.print <$> a, printPath <$> p])
33+
34+
_authority Lens' HierarchicalPart (Maybe Authority)
35+
_authority =
36+
lens
37+
(\(HierarchicalPart a _) → a)
38+
(\(HierarchicalPart _ p) a → HierarchicalPart a p)
39+
40+
_path Lens' HierarchicalPart (Maybe URIPathAbs)
41+
_path =
42+
lens
43+
(\(HierarchicalPart _ p) → p)
44+
(\(HierarchicalPart a _) p → HierarchicalPart a p)

src/Data/URI/Host.purs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import Prelude
44

55
import Control.Alt ((<|>))
66
import Data.Int as Int
7+
import Data.Lens (Prism', prism')
78
import Data.Maybe (Maybe(..))
89
import Data.URI (Host(..))
910
import Data.URI.Common (decodePCT, joinWith, parsePCTEncoded, parseSubDelims, parseUnreserved, rxPat)
@@ -48,3 +49,18 @@ print ∷ Host → String
4849
print (IPv6Address i) = "[" <> i <> "]"
4950
print (IPv4Address i) = i
5051
print (NameAddress i) = encodeURI i
52+
53+
_IPv6Address Prism' Host String
54+
_IPv6Address = prism' IPv6Address case _ of
55+
IPv6Address s → Just s
56+
_ → Nothing
57+
58+
_IPv4Address Prism' Host String
59+
_IPv4Address = prism' IPv4Address case _ of
60+
IPv4Address s → Just s
61+
_ → Nothing
62+
63+
_NameAddress Prism' Host String
64+
_NameAddress = prism' NameAddress case _ of
65+
NameAddress s → Just s
66+
_ → Nothing

src/Data/URI/RelativePart.purs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ import Prelude
44

55
import Control.Alt ((<|>))
66
import Data.Array (catMaybes)
7+
import Data.Lens (Lens', lens)
78
import Data.Maybe (Maybe(..))
89
import Data.String as S
9-
import Data.URI (RelativePart(..))
10+
import Data.URI (Authority, RelativePart(..), URIPathRel)
1011
import Data.URI.Authority as Authority
1112
import Data.URI.Path (printPath, parseURIPathRel, parsePathNoScheme, parsePathAbsolute, parsePathAbEmpty)
1213
import Text.Parsing.StringParser (Parser)
@@ -35,3 +36,15 @@ print (RelativePart a p) =
3536
[ (\auth → "//" <> Authority.print auth) <$> a
3637
, printPath <$> p
3738
]
39+
40+
_authority Lens' RelativePart (Maybe Authority)
41+
_authority =
42+
lens
43+
(\(RelativePart a _) → a)
44+
(\(RelativePart _ p) a → RelativePart a p)
45+
46+
_path Lens' RelativePart (Maybe URIPathRel)
47+
_path =
48+
lens
49+
(\(RelativePart _ p) → p)
50+
(\(RelativePart a _) p → RelativePart a p)

src/Data/URI/RelativeRef.purs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ import Prelude
44

55
import Data.Array (catMaybes)
66
import Data.Either (Either)
7+
import Data.Lens (Lens', lens)
78
import Data.Maybe (Maybe(..))
89
import Data.String as S
9-
import Data.URI (RelativeRef(..))
10+
import Data.URI (Fragment, Query, RelativePart, RelativeRef(..))
1011
import Data.URI.Fragment as Fragment
1112
import Data.URI.Query as Query
1213
import Data.URI.RelativePart as RPart
@@ -31,3 +32,21 @@ print (RelativeRef h q f) =
3132
, Query.print <$> q
3233
, (\frag → "#" <> Fragment.print frag) <$> f
3334
]
35+
36+
_relPart Lens' RelativeRef RelativePart
37+
_relPart =
38+
lens
39+
(\(RelativeRef r _ _) → r)
40+
(\(RelativeRef _ q f) r → RelativeRef r q f)
41+
42+
_query Lens' RelativeRef (Maybe Query)
43+
_query =
44+
lens
45+
(\(RelativeRef _ q _) → q)
46+
(\(RelativeRef r _ f) q → RelativeRef r q f)
47+
48+
_fragment Lens' RelativeRef (Maybe Fragment)
49+
_fragment =
50+
lens
51+
(\(RelativeRef _ _ f) → f)
52+
(\(RelativeRef r q _) f → RelativeRef r q f)

src/Data/URI/URI.purs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ import Prelude
44

55
import Data.Array (catMaybes)
66
import Data.Either (Either)
7+
import Data.Lens (Lens', lens)
78
import Data.Maybe (Maybe(..))
89
import Data.String as S
9-
import Data.URI (URI(..))
10+
import Data.URI (Fragment, HierarchicalPart, Query, Scheme, URI(..))
1011
import Data.URI.Fragment as Fragment
1112
import Data.URI.HierarchicalPart as HPart
1213
import Data.URI.Query as Query
@@ -34,3 +35,27 @@ print (URI s h q f) =
3435
, Query.print <$> q
3536
, (\frag → "#" <> Fragment.print frag) <$> f
3637
]
38+
39+
_scheme Lens' URI (Maybe Scheme)
40+
_scheme =
41+
lens
42+
(\(URI s _ _ _) → s)
43+
(\(URI _ h q f) s → URI s h q f)
44+
45+
_hierPart Lens' URI HierarchicalPart
46+
_hierPart =
47+
lens
48+
(\(URI _ h _ _) → h)
49+
(\(URI s _ q f) h → URI s h q f)
50+
51+
_query Lens' URI (Maybe Query)
52+
_query =
53+
lens
54+
(\(URI _ _ q _) → q)
55+
(\(URI s h _ f) q → URI s h q f)
56+
57+
_fragment Lens' URI (Maybe Fragment)
58+
_fragment =
59+
lens
60+
(\(URI _ _ _ f) → f)
61+
(\(URI s h q _) f → URI s h q f)

0 commit comments

Comments
 (0)