Skip to content

Commit 81b20ba

Browse files
committed
Merge pull request #8 from jdegoes/ready/char
introduce Char type
2 parents 4bd42a1 + 02c88e7 commit 81b20ba

File tree

4 files changed

+199
-119
lines changed

4 files changed

+199
-119
lines changed

README.md

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,34 @@
11
# Module Documentation
22

3+
## Module Data.Char
4+
5+
### Types
6+
7+
newtype Char
8+
9+
10+
### Values
11+
12+
charString :: Char -> String
13+
14+
fromCharCode :: Number -> Char
15+
16+
toCharCode :: Char -> Number
17+
18+
319
## Module Data.String
420

521
### Values
622

7-
charAt :: Number -> String -> String
23+
charAt :: Number -> String -> Maybe Char
824

925
charCodeAt :: Number -> String -> Number
1026

1127
drop :: Number -> String -> String
1228

13-
fromCharCode :: Number -> String
29+
fromChar :: Char -> String
30+
31+
fromCharArray :: [Char] -> String
1432

1533
indexOf :: String -> String -> Number
1634

@@ -32,6 +50,8 @@
3250

3351
take :: Number -> String -> String
3452

53+
toCharArray :: String -> [Char]
54+
3555
toLower :: String -> String
3656

3757
toUpper :: String -> String

bower.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,8 @@
1616
"bower.json",
1717
"Gruntfile.js",
1818
"package.json"
19-
]
19+
],
20+
"dependencies": {
21+
"purescript-maybe": "~0.2.1"
22+
}
2023
}

src/Data/Char/Char.purs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
module Data.Char
2+
( Char(),
3+
charString,
4+
fromCharCode,
5+
toCharCode
6+
) where
7+
8+
newtype Char = Char String
9+
10+
charString :: Char -> String
11+
charString (Char s) = s
12+
13+
foreign import toCharCode
14+
"function toCharCode(c){\
15+
\ return c.charCodeAt(0);\
16+
\}" :: Char -> Number
17+
18+
foreign import fromCharCode
19+
"function fromCharCode(c){\
20+
\ return String.fromCharCode(c);\
21+
\}" :: Number -> Char
22+

src/Data/String.purs

Lines changed: 151 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -1,116 +1,151 @@
1-
module Data.String where
2-
3-
foreign import charAt
4-
"function charAt(i) {\
5-
\ return function(s) {\
6-
\ return s.charAt(i); \
7-
\ };\
8-
\}" :: Number -> String -> String
9-
10-
foreign import charCodeAt
11-
"function charCodeAt(i) {\
12-
\ return function(s) {\
13-
\ return s.charCodeAt(i); \
14-
\ };\
15-
\}" :: Number -> String -> Number
16-
17-
foreign import fromCharCode
18-
"function fromCharCode(n) {\
19-
\ return String.fromCharCode(n);\
20-
\}" :: Number -> String
21-
22-
foreign import indexOf
23-
"function indexOf(x) {\
24-
\ return function(s) {\
25-
\ return s.indexOf(x);\
26-
\ }; \
27-
\}" :: String -> String -> Number
28-
29-
foreign import indexOf'
30-
"function indexOf$prime(x) {\
31-
\ return function(startAt) {\
32-
\ return function(s) {\
33-
\ return s.indexOf(x, startAt);\
34-
\ }; \
35-
\ }; \
36-
\}" :: String -> Number -> String -> Number
37-
38-
foreign import lastIndexOf
39-
"function lastIndexOf(x) {\
40-
\ return function(s) {\
41-
\ return s.lastIndexOf(x);\
42-
\ };\
43-
\}" :: String -> String -> Number
44-
45-
foreign import lastIndexOf'
46-
"function lastIndexOf$prime(x) {\
47-
\ return function(startAt) {\
48-
\ return function(s) {\
49-
\ return s.lastIndexOf(x, startAt);\
50-
\ }; \
51-
\ }; \
52-
\}" :: String -> Number -> String -> Number
53-
54-
foreign import length
55-
"function length(s) {\
56-
\ return s.length;\
57-
\}" :: String -> Number
58-
59-
foreign import localeCompare
60-
"function localeCompare(s1) {\
61-
\ return function(s2) {\
62-
\ return s1.localeCompare(s2);\
63-
\ };\
64-
\}" :: String -> String -> Number
65-
66-
foreign import replace
67-
"function replace(s1) {\
68-
\ return function(s2) {\
69-
\ return function(s3) {\
70-
\ return s3.replace(s1, s2);\
71-
\ };\
72-
\ };\
73-
\}" :: String -> String -> String -> String
74-
75-
foreign import take
76-
"function take(n) {\
77-
\ return function(s) {\
78-
\ return s.substr(0, n);\
79-
\ };\
80-
\}" :: Number -> String -> String
81-
82-
foreign import drop
83-
"function drop(n) {\
84-
\ return function(s) {\
85-
\ return s.substr(n);\
86-
\ };\
87-
\}" :: Number -> String -> String
88-
89-
foreign import split
90-
"function split(sep) {\
91-
\ return function(s) {\
92-
\ return s.split(sep);\
93-
\ };\
94-
\}" :: String -> String -> [String]
95-
96-
foreign import toLower
97-
"function toLower(s) {\
98-
\ return s.toLowerCase();\
99-
\}" :: String -> String
100-
101-
foreign import toUpper
102-
"function toUpper(s) {\
103-
\ return s.toUpperCase();\
104-
\}" :: String -> String
105-
106-
foreign import trim
107-
"function trim(s) {\
108-
\ return s.trim();\
109-
\}" :: String -> String
110-
111-
foreign import joinWith
112-
"function joinWith (s) {\
113-
\ return function (xs) {\
114-
\ return xs.join(s);\
115-
\ };\
116-
\}" :: String -> [String] -> String
1+
module Data.String
2+
(
3+
charAt,
4+
charCodeAt,
5+
fromCharArray,
6+
fromChar,
7+
indexOf,
8+
indexOf',
9+
lastIndexOf,
10+
lastIndexOf',
11+
length,
12+
localeCompare,
13+
replace,
14+
take,
15+
drop,
16+
split,
17+
toCharArray,
18+
toLower,
19+
toUpper,
20+
trim,
21+
joinWith
22+
) where
23+
24+
import Data.Maybe
25+
import Data.Char
26+
import Data.Function
27+
28+
foreign import _charAt
29+
"function _charAt(i, s, Just, Nothing) {\
30+
\ if (i < 0 || i >= s.length) return Nothing;\
31+
\ else return Just(s.charAt(i));\
32+
\}" :: forall a. Fn4 Number String (a -> Maybe a) (Maybe a) (Maybe Char)
33+
34+
charAt :: Number -> String -> Maybe Char
35+
charAt n s = runFn4 _charAt n s Just Nothing
36+
37+
fromChar :: Char -> String
38+
fromChar = charString
39+
40+
foreign import charCodeAt
41+
"function charCodeAt(i) {\
42+
\ return function(s) {\
43+
\ return s.charCodeAt(i); \
44+
\ };\
45+
\}" :: Number -> String -> Number
46+
47+
foreign import fromCharArray
48+
"function fromCharArray(a) {\
49+
\ return a.join(''); \
50+
\" :: [Char] -> String
51+
52+
foreign import indexOf
53+
"function indexOf(x) {\
54+
\ return function(s) {\
55+
\ return s.indexOf(x);\
56+
\ }; \
57+
\}" :: String -> String -> Number
58+
59+
foreign import indexOf'
60+
"function indexOf$prime(x) {\
61+
\ return function(startAt) {\
62+
\ return function(s) {\
63+
\ return s.indexOf(x, startAt);\
64+
\ }; \
65+
\ }; \
66+
\}" :: String -> Number -> String -> Number
67+
68+
foreign import lastIndexOf
69+
"function lastIndexOf(x) {\
70+
\ return function(s) {\
71+
\ return s.lastIndexOf(x);\
72+
\ };\
73+
\}" :: String -> String -> Number
74+
75+
foreign import lastIndexOf'
76+
"function lastIndexOf$prime(x) {\
77+
\ return function(startAt) {\
78+
\ return function(s) {\
79+
\ return s.lastIndexOf(x, startAt);\
80+
\ }; \
81+
\ }; \
82+
\}" :: String -> Number -> String -> Number
83+
84+
foreign import length
85+
"function length(s) {\
86+
\ return s.length;\
87+
\}" :: String -> Number
88+
89+
foreign import localeCompare
90+
"function localeCompare(s1) {\
91+
\ return function(s2) {\
92+
\ return s1.localeCompare(s2);\
93+
\ };\
94+
\}" :: String -> String -> Number
95+
96+
foreign import replace
97+
"function replace(s1) {\
98+
\ return function(s2) {\
99+
\ return function(s3) {\
100+
\ return s3.replace(s1, s2);\
101+
\ };\
102+
\ };\
103+
\}" :: String -> String -> String -> String
104+
105+
foreign import take
106+
"function take(n) {\
107+
\ return function(s) {\
108+
\ return s.substr(0, n);\
109+
\ };\
110+
\}" :: Number -> String -> String
111+
112+
foreign import drop
113+
"function drop(n) {\
114+
\ return function(s) {\
115+
\ return s.substr(n);\
116+
\ };\
117+
\}" :: Number -> String -> String
118+
119+
foreign import split
120+
"function split(sep) {\
121+
\ return function(s) {\
122+
\ return s.split(sep);\
123+
\ };\
124+
\}" :: String -> String -> [String]
125+
126+
foreign import toCharArray
127+
"function toCharArray(s) {\
128+
\ return s.split('');\
129+
\}" :: String -> [Char]
130+
131+
foreign import toLower
132+
"function toLower(s) {\
133+
\ return s.toLowerCase();\
134+
\}" :: String -> String
135+
136+
foreign import toUpper
137+
"function toUpper(s) {\
138+
\ return s.toUpperCase();\
139+
\}" :: String -> String
140+
141+
foreign import trim
142+
"function trim(s) {\
143+
\ return s.trim();\
144+
\}" :: String -> String
145+
146+
foreign import joinWith
147+
"function joinWith (s) {\
148+
\ return function (xs) {\
149+
\ return xs.join(s);\
150+
\ };\
151+
\}" :: String -> [String] -> String

0 commit comments

Comments
 (0)