Skip to content

Commit e8d99fd

Browse files
committed
Merge pull request #18 from NightRa/master
Added a null,singleton,uncons,takeWhile and dropWhile to Data.String
2 parents fbf4500 + 29e6236 commit e8d99fd

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

README.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,12 @@
3333

3434
charCodeAt :: Number -> String -> Maybe Number
3535

36+
count :: (Char -> Boolean) -> String -> Number
37+
3638
drop :: Number -> String -> String
3739

40+
dropWhile :: (Char -> Boolean) -> String -> String
41+
3842
fromChar :: Char -> String
3943

4044
fromCharArray :: [Char] -> String
@@ -53,12 +57,18 @@
5357

5458
localeCompare :: String -> String -> Number
5559

60+
null :: String -> Boolean
61+
5662
replace :: String -> String -> String -> String
5763

64+
singleton :: Char -> String
65+
5866
split :: String -> String -> [String]
5967

6068
take :: Number -> String -> String
6169

70+
takeWhile :: (Char -> Boolean) -> String -> String
71+
6272
toCharArray :: String -> [Char]
6373

6474
toLower :: String -> String
@@ -67,14 +77,16 @@
6777

6878
trim :: String -> String
6979

80+
uncons :: String -> Maybe { tail :: String, head :: Char }
81+
7082

7183
## Module Data.String.Regex
7284

7385
### Types
7486

7587
data Regex :: *
7688

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

7991

8092
### Type Class Instances

src/Data/String.purs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,17 @@ module Data.String
88
indexOf',
99
lastIndexOf,
1010
lastIndexOf',
11+
null,
12+
uncons,
1113
length,
14+
singleton,
1215
localeCompare,
1316
replace,
17+
count,
1418
take,
19+
takeWhile,
1520
drop,
21+
dropWhile,
1622
split,
1723
toCharArray,
1824
toLower,
@@ -24,6 +30,7 @@ module Data.String
2430
import Data.Maybe
2531
import Data.Char
2632
import Data.Function
33+
import qualified Data.String.Unsafe as U
2734

2835
foreign import _charAt
2936
"""
@@ -38,6 +45,9 @@ module Data.String
3845
fromChar :: Char -> String
3946
fromChar = charString
4047

48+
singleton :: Char -> String
49+
singleton = fromChar
50+
4151
foreign import _charCodeAt
4252
"""
4353
function _charCodeAt(i, s, Just, Nothing) {
@@ -48,6 +58,19 @@ module Data.String
4858
charCodeAt :: Number -> String -> Maybe Number
4959
charCodeAt n s = runFn4 _charCodeAt n s Just Nothing
5060

61+
null :: String -> Boolean
62+
null s = length s == 0
63+
64+
uncons :: String -> Maybe {head :: Char, tail :: String}
65+
uncons s | null s = Nothing
66+
uncons s = Just {head : U.charAt 0 s, tail : drop 1 s}
67+
68+
takeWhile :: (Char -> Boolean) -> String -> String
69+
takeWhile p s = take (count p s) s
70+
71+
dropWhile :: (Char -> Boolean) -> String -> String
72+
dropWhile p s = drop (count p s) s
73+
5174
foreign import fromCharArray
5275
"""
5376
function fromCharArray(a) {
@@ -140,6 +163,17 @@ module Data.String
140163
}
141164
""" :: Number -> String -> String
142165

166+
foreign import count
167+
"""
168+
function count(p){
169+
return function(s){
170+
var i;
171+
for(i = 0; i < s.length && p(s.charAt(i)); i++){};
172+
return i;
173+
};
174+
}
175+
""" :: (Char -> Boolean) -> String -> Number
176+
143177
foreign import split
144178
"""
145179
function split(sep) {

0 commit comments

Comments
 (0)