elm/libraries/Basics.elm

254 lines
6.7 KiB
Elm
Raw Normal View History

2013-07-25 21:52:39 +00:00
module Basics where
import Native.Basics
type String = [Char]
-- Convert radians to standard Elm angles (radians).
radians : Float -> Float
radians t = t
-- Convert degrees to standard Elm angles (radians).
degrees : Float -> Float
degrees d = d * Native.Basics.pi / 180
-- Convert turns to standard Elm angles (radians).
-- One turn is equal to 360°.
turns : Float -> Float
turns r = 2 * Native.Basics.pi * r
-- Start with polar coordinates (r,θ)
-- and get out cartesian coordinates (x,y).
fromPolar : (Float,Float) -> (Float,Float)
fromPolar (r,t) = (r * Native.Basics.cos t, r * Native.Basics.sin t)
-- Start with cartesian coordinates (x,y)
-- and get out polar coordinates (r,θ).
toPolar : (Float,Float) -> (Float,Float)
toPolar (x,y) = (Native.Basics.sqrt (x^2 + y^2), Native.Basics.atan2 y x)
2013-07-25 21:21:15 +00:00
(+) : number -> number -> number
(+) = Native.Basics.add
2013-07-25 21:52:39 +00:00
2013-07-25 21:21:15 +00:00
(-) : number -> number -> number
(-) = Native.Basics.sub
2013-07-25 21:52:39 +00:00
2013-07-25 21:21:15 +00:00
(*) : number -> number -> number
(*) = Native.Basics.mul
-- Floating point division.
(/) : Float -> Float -> Float
(/) = Native.Basics.floatDiv
-- Integer division, remainder is discarded.
div : Int -> Int -> Int
div = Native.Basics.div
-- Finds the remainder after dividing one number by another: ``4 `rem` 3 == 1``
rem : Int -> Int -> Int
rem = Native.Basics.rem
-- Perform modular arithmetic: ``7 `mod` 2 == 1``
mod : Int -> Int -> Int
mod = Native.Basics.mod
-- Exponentiation: `3^2 == 9`
2013-07-25 21:21:15 +00:00
(^) : number -> number -> number
(^) = Native.Basics.exp
cos : Float -> Float
cos = Native.Basics.cos
2013-07-25 21:52:39 +00:00
sin : Float -> Float
sin = Native.Basics.sin
2013-07-25 21:52:39 +00:00
tan : Float -> Float
tan = Native.Basics.tan
2013-07-25 21:52:39 +00:00
acos : Float -> Float
acos = Native.Basics.acos
2013-07-25 21:52:39 +00:00
asin : Float -> Float
asin = Native.Basics.asin
-- You probably do not want to use this. Because it takes `(y/x)` as the argument
-- there is no way to know where the negative signs come from so the resulting
-- angle is always between π/2 and -π/2 (in quadrants I and IV).
atan : Float -> Float
atan = Native.Basics.atan
-- This helps you find the angle of a cartesian coordinate.
-- You will almost certainly want to use this instead of `atan`.
-- So `atan2 y x` computes *atan(y/x)* but also keeps track of which
-- quadrant the angle should really be in. The result will be between
-- π and -π, giving you the full range of angles.
atan2 : Float -> Float -> Float
atan2 = Native.Basics.atan2
-- Take the square root of a number.
2013-07-25 21:21:15 +00:00
sqrt : number -> number
sqrt = Native.Basics.sqrt
-- Take the absolute value of a number.
2013-07-25 21:21:15 +00:00
abs : number -> number
abs = Native.Basics.abs
-- Calculate the logarithm of a number with a given base: `logBase 10 100 == 2`
2013-07-25 21:21:15 +00:00
logBase : number -> number -> number
logBase = Native.Basics.logBase
2013-07-25 21:52:39 +00:00
-- Given two comparables, returns the smaller one.
min : comparable -> comparable -> comparable
min = Native.Basics.min
2013-07-25 21:52:39 +00:00
-- Given two comparables, returns the larger one.
max : comparable -> comparable -> comparable
max = Native.Basics.max
-- Clamps a number within a given range. With the expression `clamp 100 200 x`
-- the results are as follows:
--
-- * `100 if x < 100`
-- * ` x if 100 <= x < 200`
-- * `200 if 200 <= x`
2013-07-25 21:21:15 +00:00
clamp : number -> number -> number -> number
clamp = Native.Basics.clamp
-- An approximation of pi.
pi : Float
pi = Native.Basics.pi
-- An approximation of e.
e : Float
e = Native.Basics.e
-- Compare any two values for structural equality. Functions cannot be compared.
2013-04-28 12:01:41 +00:00
(==) : a -> a -> Bool
(==) = Native.Basics.eq
2013-07-25 21:52:39 +00:00
2013-04-28 12:01:41 +00:00
(/=) : a -> a -> Bool
(/=) = Native.Basics.neq
2013-07-25 21:21:15 +00:00
(<) : comparable -> comparable -> Bool
(<) = Native.Basics.lt
2013-07-25 21:52:39 +00:00
2013-07-25 21:21:15 +00:00
(>) : comparable -> comparable -> Bool
(>) = Native.Basics.gt
2013-07-25 21:52:39 +00:00
2013-07-25 21:21:15 +00:00
(<=) : comparable -> comparable -> Bool
(<=) = Native.Basics.le
2013-07-25 21:52:39 +00:00
2013-07-25 21:21:15 +00:00
(>=) : comparable -> comparable -> Bool
(>=) = Native.Basics.ge
-- Compare any two comparable values. Comparable values include `String`, `Char`,
-- `Int`, `Float`, `Time`, or a list or tuple containing comparable values.
-- These are also the only values that work as `Dict` keys or `Set` members.
2013-07-25 21:21:15 +00:00
compare : comparable -> comparable -> Order
compare = Native.Basics.compare
-- Represents the relative ordering of two things.
-- The relations are less than, equal to, and greater than.
data Order = LT | EQ | GT
-- The and operator. True if both inputs are True.
(&&) : Bool -> Bool -> Bool
(&&) = Native.Basics.and
-- The or operator. True if one or both inputs are True.
(||) : Bool -> Bool -> Bool
(||) = Native.Basics.or
-- The exclusive-or operator. True if exactly one input is True.
xor : Bool -> Bool -> Bool
xor = Native.Basics.xor
-- Negate a boolean value: `(not True == False)` and `(not False == True)`
not : Bool -> Bool
not = Native.Basics.not
-- Equal to true. Useful as the last case of a multi-way-if.
otherwise : Bool
otherwise = True
-- Conversions
-- Round a number to the nearest integer.
round : Float -> Int
round = Native.Basics.round
-- Truncate a decimal number, rounding towards zero.
truncate : Float -> Int
truncate = Native.Basics.truncate
-- Floor function, rounding down.
floor : Float -> Int
floor = Native.Basics.floor
-- Ceiling function, rounding up.
ceiling : Float -> Int
ceiling = Native.Basics.ceiling
-- Convert an integer into a float.
toFloat : Int -> Float
toFloat = Native.Basics.toFloat
-- Function Helpers
-- Function composition: `(f . g == (\\x -> f (g x)))`
(.) : (b -> c) -> (a -> b) -> (a -> c)
2013-07-25 21:52:39 +00:00
(.) f g x = f (g x)
2013-04-25 05:26:01 +00:00
-- Forward function application `x |> f == f x`. This function is useful
-- for avoiding parenthesis and writing code in a more natural way.
-- Consider the following code to create a pentagon:
--
-- scale 2 (move (10,10) (filled blue (ngon 5 30)))
2013-04-25 05:26:01 +00:00
--
-- This can also be written as:
--
-- ngon 5 30 |> filled blue
-- |> move (10,10)
-- |> scale 2
2013-04-25 05:26:01 +00:00
(|>) : a -> (a -> b) -> b
2013-07-25 21:52:39 +00:00
x |> f = f x
2013-04-25 05:26:01 +00:00
-- Function application `f <| x == f x`. This function is useful for avoiding
-- parenthesis. Consider the following code to create a text element:
2013-04-25 05:26:01 +00:00
--
-- text (monospace (toText "code"))
2013-04-25 05:26:01 +00:00
--
-- This can also be written as:
2013-04-25 05:26:01 +00:00
--
-- text . monospace <| toText "code"
2013-04-25 05:26:01 +00:00
(<|) : (a -> b) -> a -> b
2013-07-25 21:52:39 +00:00
f <| x = f x
-- Given a value, returns exactly the same value.
id : a -> a
2013-07-25 21:52:39 +00:00
id x = x
-- Given a 2-tuple, returns the first value.
fst : (a,b) -> a
fst = Native.Basics.fst
-- Given a 2-tuple, returns the second value.
snd : (a,b) -> b
snd = Native.Basics.snd
-- Flips the order of the first two arguments to a function.
flip : (a -> b -> c) -> (b -> a -> c)
2013-07-25 21:52:39 +00:00
flip f b a = f a b
-- Change how arguments are passed to a function. This splits paired arguments
-- into two separate arguments.
curry : ((a,b) -> c) -> a -> b -> c
curry = Native.Basics.curry
-- Change how arguments are passed to a function. This combines two arguments
-- into a sigle pair.
uncurry : (a -> b -> c) -> (a,b) -> c
uncurry = Native.Basics.uncurry