From 1f49396ae461bd283088a52876bb595aa1c5f692 Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Mon, 27 Oct 2014 20:51:03 +0000 Subject: [PATCH 1/2] Make charCodeAt safe --- README.md | 2 +- src/Data/String.purs | 16 +++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 5017222..e3d35ad 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ charAt :: Number -> String -> Maybe Char - charCodeAt :: Number -> String -> Number + charCodeAt :: Number -> String -> Maybe Number drop :: Number -> String -> String diff --git a/src/Data/String.purs b/src/Data/String.purs index 595cfcd..aefdbe3 100644 --- a/src/Data/String.purs +++ b/src/Data/String.purs @@ -37,12 +37,14 @@ module Data.String fromChar :: Char -> String fromChar = charString - foreign import charCodeAt - "function charCodeAt(i) {\ - \ return function(s) {\ - \ return s.charCodeAt(i); \ - \ };\ - \}" :: Number -> String -> Number + foreign import _charCodeAt + "function _charCodeAt(i, s, Just, Nothing) {\ + \ if (i < 0 || i >= s.length) return Nothing;\ + \ else return Just(s.charCodeAt(i));\ + \}" :: forall a. Fn4 Number String (a -> Maybe a) (Maybe a) (Maybe Number) + + charCodeAt :: Number -> String -> Maybe Number + charCodeAt n s = runFn4 _charCodeAt n s Just Nothing foreign import fromCharArray "function fromCharArray(a) {\ @@ -123,7 +125,7 @@ module Data.String \ };\ \}" :: String -> String -> [String] - foreign import toCharArray + foreign import toCharArray "function toCharArray(s) {\ \ return s.split('');\ \}" :: String -> [Char] From c60ce9007165e6b000ac88863ac8f3012d84f4ec Mon Sep 17 00:00:00 2001 From: Gary Burgess Date: Mon, 27 Oct 2014 20:51:31 +0000 Subject: [PATCH 2/2] Add unsafe versions of charAt, charCodeAt --- README.md | 11 ++++++++++- src/Data/String/Unsafe.purs | 24 ++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 src/Data/String/Unsafe.purs diff --git a/README.md b/README.md index e3d35ad..61deb49 100644 --- a/README.md +++ b/README.md @@ -104,4 +104,13 @@ split :: Regex -> String -> [String] - test :: Regex -> String -> Boolean \ No newline at end of file + test :: Regex -> String -> Boolean + + +## Module Data.String.Unsafe + +### Values + + charAt :: Number -> String -> Char + + charCodeAt :: Number -> String -> Number \ No newline at end of file diff --git a/src/Data/String/Unsafe.purs b/src/Data/String/Unsafe.purs new file mode 100644 index 0000000..20e54dc --- /dev/null +++ b/src/Data/String/Unsafe.purs @@ -0,0 +1,24 @@ +module Data.String.Unsafe + ( charAt + , charCodeAt + ) where + + import Data.Char + + foreign import charCodeAt + """ + function charCodeAt(i) { + return function(s) { + return s.charCodeAt(i); + }; + } + """ :: Number -> String -> Number + + foreign import charAt + """ + function charAt(i) { + return function(s) { + return s.charAt(i); + }; + } + """ :: Number -> String -> Char