@@ -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