Convert Date, Mouse, Window, and Signal docs.

This commit is contained in:
Max Goldstein 2013-09-08 16:33:48 -04:00
parent 0c3e146c2b
commit 6869015507
4 changed files with 146 additions and 95 deletions

View file

@ -1,9 +1,17 @@
-- Library for working with dates. It is still a work in progress, so email
-- the mailing list if you are having issues with internationalization or
-- locale formatting or something.
module Date where module Date where
{-| Library for working with dates. Email the mailing list if you encounter
issues with internationalization or locale formatting.
# Conversions
@docs read, toTime
# Extractions
@docs year, month, Month, day, dayOfWeek, Day, hour, minute, second
-}
import Basics (String) import Basics (String)
import Native.Date import Native.Date
import Time (Time) import Time (Time)
@ -11,55 +19,55 @@ import Maybe (Maybe)
data Date = Date data Date = Date
-- Represents the days of the week. {-| Represents the days of the week. -}
data Day = Mon | Tue | Wed | Thu | Fri | Sat | Sun data Day = Mon | Tue | Wed | Thu | Fri | Sat | Sun
-- Represents the month of the year. {-| Represents the month of the year. -}
data Month = Jan | Feb | Mar | Apr data Month = Jan | Feb | Mar | Apr
| May | Jun | Jul | Aug | May | Jun | Jul | Aug
| Sep | Oct | Nov | Dec | Sep | Oct | Nov | Dec
-- Attempt to read a date from a string. {-| Attempt to read a date from a string. -}
read : String -> Maybe Date read : String -> Maybe Date
read = Native.Date.read read = Native.Date.read
-- Convert a date into a time since midnight (UTC) of 1 January 1990 (i.e. {-| Convert a date into a time since midnight (UTC) of 1 January 1990 (i.e.
-- [UNIX time](http://en.wikipedia.org/wiki/Unix_time)). Given the date 23 June [UNIX time](http://en.wikipedia.org/wiki/Unix_time)). Given the date 23 June
-- 1990 at 11:45AM this returns the corresponding time. 1990 at 11:45AM this returns the corresponding time. -}
toTime : Date -> Time toTime : Date -> Time
toTime = Native.Date.toTime toTime = Native.Date.toTime
-- Extract the year of a given date. Given the date 23 June 1990 at 11:45AM {-| Extract the year of a given date. Given the date 23 June 1990 at 11:45AM
-- this returns the integer `1990`. this returns the integer `1990`. -}
year : Date -> Int year : Date -> Int
year = Native.Date.year year = Native.Date.year
-- Extract the month of a given date. Given the date 23 June 1990 at 11:45AM {-| Extract the month of a given date. Given the date 23 June 1990 at 11:45AM
-- this returns the Month `Jun` as defined below. this returns the Month `Jun` as defined below. -}
month : Date -> Month month : Date -> Month
month = Native.Date.month month = Native.Date.month
-- Extract the day of a given date. Given the date 23 June 1990 at 11:45AM {-| Extract the day of a given date. Given the date 23 June 1990 at 11:45AM
-- this returns the integer `23`. this returns the integer `23`. -}
day : Date -> Int day : Date -> Int
day = Native.Date.day day = Native.Date.day
-- Extract the day of the week for a given date. Given the date 23 June {-| Extract the day of the week for a given date. Given the date 23 June
-- 1990 at 11:45AM this returns the Day `Thu` as defined below. 1990 at 11:45AM this returns the Day `Thu` as defined below. -}
dayOfWeek : Date -> Day dayOfWeek : Date -> Day
dayOfWeek = Native.Date.dayOfWeek dayOfWeek = Native.Date.dayOfWeek
-- Extract the hour of a given date. Given the date 23 June 1990 at 11:45AM {-| Extract the hour of a given date. Given the date 23 June 1990 at 11:45AM
-- this returns the integer `11`. this returns the integer `11`. -}
hour : Date -> Int hour : Date -> Int
hour = Native.Date.hour hour = Native.Date.hour
-- Extract the minute of a given date. Given the date 23 June 1990 at 11:45AM {-| Extract the minute of a given date. Given the date 23 June 1990 at 11:45AM
-- this returns the integer `45`. this returns the integer `45`. -}
minute : Date -> Int minute : Date -> Int
minute = Native.Date.minute minute = Native.Date.minute
-- Extract the second of a given date. Given the date 23 June 1990 at 11:45AM {-| Extract the second of a given date. Given the date 23 June 1990 at 11:45AM
-- this returns the integer `0`. this returns the integer `0`. -}
second : Date -> Int second : Date -> Int
second = Native.Date.second second = Native.Date.second

View file

@ -1,31 +1,41 @@
module Mouse where module Mouse where
{-| Library for working with mouse input.
# Position
@docs position, x, y
# Button Status
@docs isDown, clicks, isClicked
-}
import Signal (Signal) import Signal (Signal)
import Native.Mouse import Native.Mouse
-- The current mouse position. {-| The current mouse position. -}
position : Signal (Int,Int) position : Signal (Int,Int)
position = Native.Mouse.position position = Native.Mouse.position
-- The current x-coordinate of the mouse. {-| The current x-coordinate of the mouse. -}
x : Signal Int x : Signal Int
x = Native.Mouse.x x = Native.Mouse.x
-- The current y-coordinate of the mouse. {-| The current y-coordinate of the mouse. -}
y : Signal Int y : Signal Int
y = Native.Mouse.y y = Native.Mouse.y
-- The current state of the left mouse-button. {-| The current state of the left mouse-button.
-- True when the button is down, and false otherwise. True when the button is down, and false otherwise. -}
isDown : Signal Bool isDown : Signal Bool
isDown = Native.Mouse.isDown isDown = Native.Mouse.isDown
-- True immediately after the left mouse-button has been clicked, {-| True immediately after the left mouse-button has been clicked,
-- and false otherwise. and false otherwise. -}
isClicked : Signal Bool isClicked : Signal Bool
isClicked = Native.Mouse.isClicked isClicked = Native.Mouse.isClicked
-- Always equal to unit. Event triggers on every mouse click. {-| Always equal to unit. Event triggers on every mouse click. -}
clicks : Signal () clicks : Signal ()
clicks = Native.Mouse.clicks clicks = Native.Mouse.clicks

View file

@ -1,32 +1,52 @@
-- The library for general signal manipulation. Some useful functions for {-| The library for general signal manipulation. Includes lift functions up to
-- working with time (e.g. setting FPS) and combining signals and time (e.g. `lift8` and infix lift operators `<~` and `~`, combinations, filters, and
-- delaying updates, getting timestamps) can be found in the past-dependence.
-- [`Time`](/docs/Signal/Time.elm) library.
-- Signals are time-varying values. Lifted functions are reevaluated whenver any of
-- Note: There are lift functions up to `lift8`. their input signals has an event. Signal events may be of the same value as the
previous value of the signal. Such signals are useful for timing and
past-dependence.
Some useful functions for working with time (e.g. setting FPS) and combining
signals and time (e.g. delaying updates, getting timestamps) can be found in
the [`Time`](/docs/Signal/Time.elm) library.
# Combine
@docs constant, lift, lift2, merge, merges, combine
# Pretty Lift
@docs (<~), (~)
# Past-Dependence
@docs foldp, count, countIf
#Filters
@docs keepIf, dropIf, keepWhen, dropWhen, dropRepeats, sampleOn
# Do you even lift?
@docs lift3, lift4, lift5, lift6, lift7, lift8
-}
module Signal where module Signal where
import Native.Signal import Native.Signal
import List (foldr) import List (foldr)
data Signal a = Signal data Signal a = Signal
-- = Constant a
-- | Lift (a -> a) (Signal a)
-- Create a constant signal that never changes. {-| Create a constant signal that never changes. -}
constant : a -> Signal a constant : a -> Signal a
constant = Native.Signal.constant constant = Native.Signal.constant
-- Transform a signal with a given function. {-| Transform a signal with a given function. -}
lift : (a -> b) -> Signal a -> Signal b lift : (a -> b) -> Signal a -> Signal b
lift = Native.Signal.lift lift = Native.Signal.lift
-- Combine two signals with a given function. {-| Combine two signals with a given function. -}
lift2 : (a -> b -> c) -> Signal a -> Signal b -> Signal c lift2 : (a -> b -> c) -> Signal a -> Signal b -> Signal c
lift2 = Native.Signal.lift2 lift2 = Native.Signal.lift2
-- Combine three signals with a given function.
lift3 : (a -> b -> c -> d) -> Signal a -> Signal b -> Signal c -> Signal d lift3 : (a -> b -> c -> d) -> Signal a -> Signal b -> Signal c -> Signal d
lift3 = Native.Signal.lift3 lift3 = Native.Signal.lift3
@ -49,25 +69,25 @@ lift8 : (a -> b -> c -> d -> e -> f -> g -> h -> i)
lift8 = Native.Signal.lift8 lift8 = Native.Signal.lift8
-- Create a past-dependent signal. Each value given on the input signal will {-| Create a past-dependent signal. Each value given on the input signal will
-- be accumulated, producing a new output value. be accumulated, producing a new output value.
--
-- For instance, `(foldp (\\arrows number -> number + arrows.y) 0 Keyboard.arrows)` For instance, `foldp (+) 0 (fps 40)` is the time the program has been running,
-- increments or decrements the accumulated value (which starts at zero) when the up or down arrow keys are pressed. updated 40 times a second. -}
foldp : (a -> b -> b) -> b -> Signal a -> Signal b foldp : (a -> b -> b) -> b -> Signal a -> Signal b
foldp = Native.Signal.foldp foldp = Native.Signal.foldp
-- Merge two signals into one, biased towards the first signal if both signals {-| Merge two signals into one, biased towards the first signal if both signals
-- update at the same time. update at the same time. -}
merge : Signal a -> Signal a -> Signal a merge : Signal a -> Signal a -> Signal a
merge = Native.Signal.merge merge = Native.Signal.merge
-- Merge many signals into one, biased towards the left-most signal if multiple {-| Merge many signals into one, biased towards the left-most signal if multiple
-- signals update simultaneously. signals update simultaneously. -}
merges : [Signal a] -> Signal a merges : [Signal a] -> Signal a
merges = Native.Signal.merges merges = Native.Signal.merges
-- Combine a list of signals into a signal of lists. {-| Combine a list of signals into a signal of lists. -}
combine : [Signal a] -> Signal [a] combine : [Signal a] -> Signal [a]
combine = foldr (Native.Signal.lift2 (::)) (Native.Signal.constant []) combine = foldr (Native.Signal.lift2 (::)) (Native.Signal.constant [])
@ -76,70 +96,74 @@ combine = foldr (Native.Signal.lift2 (::)) (Native.Signal.constant [])
-- fold over non-homogeneous inputs. -- fold over non-homogeneous inputs.
-- mergeEither : Signal a -> Signal b -> Signal (Either a b) -- mergeEither : Signal a -> Signal b -> Signal (Either a b)
-- Count the number of events that have occured. {-| Count the number of events that have occured. -}
count : Signal a -> Signal Int count : Signal a -> Signal Int
count = Native.Signal.count count = Native.Signal.count
-- Count the number of events that have occured that satisfy a given predicate. {-| Count the number of events that have occured that satisfy a given predicate.
-}
countIf : (a -> Bool) -> Signal a -> Signal Int countIf : (a -> Bool) -> Signal a -> Signal Int
countIf = Native.Signal.countIf countIf = Native.Signal.countIf
-- Keep only events that satisfy the given predicate. Elm does not allow {-| Keep only events that satisfy the given predicate. Elm does not allow
-- undefined signals, so a base case must be provided in case the predicate is undefined signals, so a base case must be provided in case the predicate is
-- never satisfied. never satisfied. -}
keepIf : (a -> Bool) -> a -> Signal a -> Signal a keepIf : (a -> Bool) -> a -> Signal a -> Signal a
keepIf = Native.Signal.keepIf keepIf = Native.Signal.keepIf
-- Drop events that satisfy the given predicate. Elm does not allow undefined {-| Drop events that satisfy the given predicate. Elm does not allow undefined
-- signals, so a base case must be provided in case the predicate is never signals, so a base case must be provided in case the predicate is never
-- satisfied. satisfied. -}
dropIf : (a -> Bool) -> a -> Signal a -> Signal a dropIf : (a -> Bool) -> a -> Signal a -> Signal a
dropIf = Native.Signal.dropIf dropIf = Native.Signal.dropIf
-- Keep events only when the first signal is true. When the first signal becomes {-| Keep events only when the first signal is true. When the first signal
-- true, the most recent value of the second signal will be propagated. Until becomes true, the most recent value of the second signal will be propagated.
-- the first signal becomes false again, all events will be propagated. Elm does Until the first signal becomes false again, all events will be propagated. Elm
-- not allow undefined signals, so a base case must be provided in case the first does not allow undefined signals, so a base case must be provided in case the
-- signal is never true. first signal is never true. -}
keepWhen : Signal Bool -> a -> Signal a -> Signal a keepWhen : Signal Bool -> a -> Signal a -> Signal a
keepWhen = Native.Signal.keepWhen keepWhen = Native.Signal.keepWhen
-- Drop events when the first signal is true. When the first signal becomes false, {-| Drop events when the first signal is true. When the first signal becomes
-- the most recent value of the second signal will be propagated. Until the first false, the most recent value of the second signal will be propagated. Until the
-- signal becomes true again, all events will be propagated. Elm does not allow first signal becomes true again, all events will be propagated. Elm does not
-- undefined signals, so a base case must be provided in case the first signal is allow undefined signals, so a base case must be provided in case the first
-- always true. signal is always true. -}
dropWhen : Signal Bool -> a -> Signal a -> Signal a dropWhen : Signal Bool -> a -> Signal a -> Signal a
dropWhen = Native.Signal.dropWhen dropWhen = Native.Signal.dropWhen
-- Drop sequential repeated values. For example, if a signal produces the {-| Drop sequential repeated values. For example, if a signal produces the
-- sequence `[1,1,2,2,1]`, it becomes `[1,2,1]` by dropping the values that sequence `[1,1,2,2,1]`, it becomes `[1,2,1]` by dropping the values that are the
-- are the same as the previous value. same as the previous value. -}
dropRepeats : Signal a -> Signal a dropRepeats : Signal a -> Signal a
dropRepeats = Native.Signal.dropRepeats dropRepeats = Native.Signal.dropRepeats
-- Sample from the second input every time an event occurs on the first input. {-| Sample from the second input every time an event occurs on the first input.
-- For example, `(sampleOn clicks (every second))` will give the approximate For example, `(sampleOn clicks (every second))` will give the approximate time
-- time of the latest click. of the latest click. -}
sampleOn : Signal a -> Signal b -> Signal b sampleOn : Signal a -> Signal b -> Signal b
sampleOn = Native.Signal.sampleOn sampleOn = Native.Signal.sampleOn
-- An alias for `lift`. A prettier way to apply a {-| An alias for `lift`. A prettier way to apply a function to the current value
-- function to the current value of a signal. of a signal. -}
--
-- lift f signal == f <~ signal
(<~) : (a -> b) -> Signal a -> Signal b (<~) : (a -> b) -> Signal a -> Signal b
f <~ s = Native.Signal.lift f s f <~ s = Native.Signal.lift f s
-- Signal application. This takes two signals, holding a function and {-| Informally, an alias for `liftN`. Intersperse it between additional signal
-- a value. It applies the current function to the current value. arguments of the lifted function.
--
-- So the following expressions are equivalent: Formally, signal application. This takes two signals, holding a function and
-- a value. It applies the current function to the current value.
-- scene <~ Window.dimensions ~ Mouse.position
-- lift2 scene Window.dimensions Mouse.position The following expressions are equivalent:
scene <~ Window.dimensions ~ Mouse.position
lift2 scene Window.dimensions Mouse.position
-}
(~) : Signal (a -> b) -> Signal a -> Signal b (~) : Signal (a -> b) -> Signal a -> Signal b
sf ~ s = Native.Signal.lift2 (\f x -> f x) sf s sf ~ s = Native.Signal.lift2 (\f x -> f x) sf s
infixl 4 <~ infixl 4 <~
infixl 4 ~ infixl 4 ~

View file

@ -1,18 +1,27 @@
module Window where module Window where
{-| Provides information about the container that your Elm program lives in.
When you embed Elm in a `<div>` it gives the dimensions of the container, not
the whole window.
# Dimensions
@docs dimensions, width, height
-}
import Signal (Signal) import Signal (Signal)
import Native.Window import Native.Window
-- The current dimensions of the window (i.e. the area viewable to the {-| The current width and height of the window (i.e. the area viewable to the
-- user, not including scroll bars). user, not including scroll bars). -}
dimensions : Signal (Int,Int) dimensions : Signal (Int,Int)
dimensions = Native.Window.dimensions dimensions = Native.Window.dimensions
-- The current width of the window. {-| The current width of the window. -}
width : Signal Int width : Signal Int
width = Native.Window.width width = Native.Window.width
-- The current height of the window. {-| The current height of the window. -}
height : Signal Int height : Signal Int
height = Native.Window.height height = Native.Window.height