diff --git a/README.md b/README.md index 5017222..61deb49 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 @@ -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.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] 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