Skip to content

Commit 87fde2a

Browse files
committed
Pass take&drop as parameters to the foreign function interface
1 parent f444b91 commit 87fde2a

File tree

1 file changed

+15
-18
lines changed

1 file changed

+15
-18
lines changed

src/Data/String.purs

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,12 @@ module Data.String
6464
uncons s | null s = Nothing
6565
uncons s = Just {head : U.charAt 0 s, tail : drop 1 s}
6666

67+
takeWhile :: (Char -> Boolean) -> String -> String
68+
takeWhile = doAfter take
69+
70+
dropWhile :: (Char -> Boolean) -> String -> String
71+
dropWhile = doAfter drop
72+
6773
foreign import fromCharArray
6874
"""
6975
function fromCharArray(a) {
@@ -147,17 +153,6 @@ module Data.String
147153
}
148154
""" :: Number -> String -> String
149155

150-
foreign import takeWhile
151-
"""
152-
function takeWhile(p){
153-
return function(s){
154-
var i;
155-
for(i = 0; i < s.length && p(s.charAt(i)); i++){};
156-
return take(i)(s);
157-
};
158-
}
159-
""" :: (Char -> Boolean) -> String -> String
160-
161156
foreign import drop
162157
"""
163158
function drop(n) {
@@ -167,16 +162,18 @@ module Data.String
167162
}
168163
""" :: Number -> String -> String
169164

170-
foreign import dropWhile
165+
foreign import doAfter
171166
"""
172-
function dropWhile(p){
173-
return function(s){
174-
var i;
175-
for(i = 0; i < s.length && p(s.charAt(i)); i++){};
176-
return drop(i)(s);
167+
function doAfter(f){
168+
return function(p){
169+
return function(s){
170+
var i;
171+
for(i = 0; i < s.length && p(s.charAt(i)); i++){};
172+
return f(i)(s);
173+
};
177174
};
178175
}
179-
""" :: (Char -> Boolean) -> String -> String
176+
""" :: (Number -> String -> String) -> (Char -> Boolean) -> String -> String
180177

181178
foreign import split
182179
"""

0 commit comments

Comments
 (0)