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