-
Notifications
You must be signed in to change notification settings - Fork 18
/
Number.purs
55 lines (48 loc) · 1.29 KB
/
Number.purs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
-- | Functions for working with PureScripts builtin `Number` type.
module Data.Number
( fromString
, nan
, isNaN
, infinity
, isFinite
) where
import Data.Function.Uncurried (Fn4, runFn4)
import Data.Maybe (Maybe(..))
-- | Not a number (NaN)
foreign import nan :: Number
-- | Test whether a number is NaN
foreign import isNaN :: Number -> Boolean
-- | Positive infinity
foreign import infinity :: Number
-- | Test whether a number is finite
foreign import isFinite :: Number -> Boolean
-- | Attempt to parse a `Number` using JavaScripts `parseFloat`. Returns
-- | `Nothing` if the parse fails or if the result is not a finite number.
-- |
-- | Example:
-- | ```purs
-- | > fromString "123"
-- | (Just 123.0)
-- |
-- | > fromString "12.34"
-- | (Just 12.34)
-- |
-- | > fromString "1e4"
-- | (Just 10000.0)
-- |
-- | > fromString "1.2e4"
-- | (Just 12000.0)
-- |
-- | > fromString "bad"
-- | Nothing
-- | ```
-- |
-- | Note that `parseFloat` allows for trailing non-digit characters and
-- | whitespace as a prefix:
-- | ```
-- | > fromString " 1.2 ??"
-- | (Just 1.2)
-- | ```
fromString :: String -> Maybe Number
fromString str = runFn4 fromStringImpl str isFinite Just Nothing
foreign import fromStringImpl :: Fn4 String (Number -> Boolean) (forall a. a -> Maybe a) (forall a. Maybe a) (Maybe Number)