Skip to content

Commit 8036395

Browse files
committed
Added a null,singleton,uncons,takeWhile and dropWhile to Data.String
1 parent fbf4500 commit 8036395

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed

README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535

3636
drop :: Number -> String -> String
3737

38+
dropWhile :: (Char -> Boolean) -> String -> String
39+
3840
fromChar :: Char -> String
3941

4042
fromCharArray :: [Char] -> String
@@ -53,12 +55,16 @@
5355

5456
localeCompare :: String -> String -> Number
5557

58+
null :: String -> Boolean
59+
5660
replace :: String -> String -> String -> String
5761

5862
split :: String -> String -> [String]
5963

6064
take :: Number -> String -> String
6165

66+
takeWhile :: (Char -> Boolean) -> String -> String
67+
6268
toCharArray :: String -> [Char]
6369

6470
toLower :: String -> String
@@ -67,14 +73,16 @@
6773

6874
trim :: String -> String
6975

76+
uncons :: String -> Maybe { tail :: String, head :: Char }
77+
7078

7179
## Module Data.String.Regex
7280

7381
### Types
7482

7583
data Regex :: *
7684

77-
type RegexFlags = { unicode :: Boolean, sticky :: Boolean, multiline :: Boolean, ignoreCase :: Boolean, global :: Boolean }
85+
type RegexFlags = { unicode :: Boolean, sticky :: Boolean, multiline :: Boolean, ignoreCase :: Boolean, global :: Boolean }
7886

7987

8088
### Type Class Instances

src/Data/String.purs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,15 @@ module Data.String
88
indexOf',
99
lastIndexOf,
1010
lastIndexOf',
11+
null,
12+
uncons,
1113
length,
1214
localeCompare,
1315
replace,
1416
take,
17+
takeWhile,
1518
drop,
19+
dropWhile,
1620
split,
1721
toCharArray,
1822
toLower,
@@ -24,6 +28,7 @@ module Data.String
2428
import Data.Maybe
2529
import Data.Char
2630
import Data.Function
31+
import qualified Data.String.Unsafe as U
2732

2833
foreign import _charAt
2934
"""
@@ -38,6 +43,9 @@ module Data.String
3843
fromChar :: Char -> String
3944
fromChar = charString
4045

46+
singleton :: Char -> String
47+
singleton = fromChar
48+
4149
foreign import _charCodeAt
4250
"""
4351
function _charCodeAt(i, s, Just, Nothing) {
@@ -48,6 +56,13 @@ module Data.String
4856
charCodeAt :: Number -> String -> Maybe Number
4957
charCodeAt n s = runFn4 _charCodeAt n s Just Nothing
5058

59+
null :: String -> Boolean
60+
null s = length s == 0
61+
62+
uncons :: String -> Maybe {head :: Char, tail :: String}
63+
uncons s | null s = Nothing
64+
uncons s = Just {head : U.charAt 0 s, tail : drop 1 s}
65+
5166
foreign import fromCharArray
5267
"""
5368
function fromCharArray(a) {
@@ -131,6 +146,17 @@ module Data.String
131146
}
132147
""" :: Number -> String -> String
133148

149+
foreign import takeWhile
150+
"""
151+
function takeWhile(p){
152+
return function(s){
153+
var i;
154+
for(i = 0; i < s.length && p(s.charAt(i)); i++){};
155+
return take(i)(s);
156+
}
157+
}
158+
""" :: (Char -> Boolean) -> String -> String
159+
134160
foreign import drop
135161
"""
136162
function drop(n) {
@@ -140,6 +166,17 @@ module Data.String
140166
}
141167
""" :: Number -> String -> String
142168

169+
foreign import dropWhile
170+
"""
171+
function dropWhile(p){
172+
return function(s){
173+
var i;
174+
for(i = 0; i < s.length && p(s.charAt(i)); i++){};
175+
return drop(i)(s);
176+
}
177+
}
178+
""" :: (Char -> Boolean) -> String -> String
179+
143180
foreign import split
144181
"""
145182
function split(sep) {

0 commit comments

Comments
 (0)