deadfoxygrandpa / Elm.tmLanguage

Elm language syntax highlighting and tool integration for ST2/3
https://packagecontrol.io/packages/Elm%20Language%20Support
MIT License
122 stars 27 forks source link

New beta release process #61

Open deadfoxygrandpa opened 8 years ago

deadfoxygrandpa commented 8 years ago

The new way to install the beta version is to open the Command Palette and select Package Control: Add Repository addrepository Then you enter the following and press Enter: https://raw.githubusercontent.com/deadfoxygrandpa/Elm.tmLanguage/beta/beta-repository.json addrepository2

Now, your Package Control installation will be tracking the beta branch of this git repository instead of the main Package Control channel. Next time your packages are upgraded, the standard release version of Elm Language Support will be uninstalled, and the beta version will be installed in its place. To switch back to the standard release of Elm Language Support, run the Package Control: Remove Repository command and remove the beta repository json file you added before.

To force the package upgrade immediately rather than waiting for Package Control to automatically check for updates, run the Package Control: Upgrade Package command. upgradepackage And select Elm Language Support. upgradepackage2

This way, you can now quickly switch to or from the beta versions from within Package Control.

deadfoxygrandpa commented 8 years ago

@rtfeldman

I just pushed a new beta version with the new beta release process. It adds very basic elm-oracle support, just showing the type signature of functions with docs attached to them down in the status bar when your cursor is over them. statusbar

Do you anyone else that would be interested in testing beta versions?

rtfeldman commented 8 years ago

So I tried following these instructions, and also uninstalling the old beta version (and removing the old beta repositories), but the new version is having trouble building. Only syntax highlighting seems to be working; errors show up in the console when I put the cursor on types, so presumably the elm-oracle thing is trying to work but failing due to the build being misconfigured somehow.

Any ideas? Here's the console output:

startup, version: 3083 osx x64 channel: stable
executable: /Applications/Sublime Text.app/Contents/MacOS/Sublime Text
working dir: /
packages path: /Users/rtfeldman/Library/Application Support/Sublime Text 3/Packages
state path: /Users/rtfeldman/Library/Application Support/Sublime Text 3/Local
zip path: /Applications/Sublime Text.app/Contents/MacOS/Packages
zip path: /Users/rtfeldman/Library/Application Support/Sublime Text 3/Installed Packages
ignored_packages: ["Vintage"]
pre session restore time: 0.401424
using gpu buffer for window
using gpu buffer for window
startup time: 0.471584
first paint time: 0.521694
reloading plugin Default.block
reloading plugin Default.comment
reloading plugin Default.copy_path
reloading plugin Default.delete_word
reloading plugin Default.detect_indentation
reloading plugin Default.duplicate_line
reloading plugin Default.echo
reloading plugin Default.exec
reloading plugin Default.fold
reloading plugin Default.font
reloading plugin Default.goto_line
reloading plugin Default.history_list
reloading plugin Default.indentation
reloading plugin Default.kill_ring
reloading plugin Default.mark
reloading plugin Default.new_templates
reloading plugin Default.open_context_url
reloading plugin Default.open_file_settings
reloading plugin Default.open_in_browser
reloading plugin Default.pane
reloading plugin Default.paragraph
reloading plugin Default.paste_from_history
reloading plugin Default.quick_panel
reloading plugin Default.save_on_focus_lost
reloading plugin Default.scroll
reloading plugin Default.set_unsaved_view_name
reloading plugin Default.side_bar
reloading plugin Default.sort
reloading plugin Default.swap_line
reloading plugin Default.switch_file
reloading plugin Default.symbol
reloading plugin Default.transform
reloading plugin Default.transpose
reloading plugin Default.trim_trailing_white_space
reloading plugin CSS.css_completions
reloading plugin Diff.diff
reloading plugin HTML.encode_html_entities
reloading plugin HTML.html_completions
reloading plugin 0_package_control_loader.00-package_control
reloading plugin 0_package_control_loader.01-pygments
reloading plugin 0_package_control_loader.02-bz2
reloading plugin 0_package_control_loader.50-pyyaml
reloading plugin AAAPackageDev.AAA
[AAAPackageDev] Added /Users/rtfeldman/Library/Application Support/Sublime Text 3/Installed Packages/AAAPackageDev.sublime-package/Lib to sys.path.
[AAAPackageDev] Added /Users/rtfeldman/Library/Application Support/Sublime Text 3/Installed Packages/AAAPackageDev.sublime-package/Lib/_py3 to sys.path.
reloading plugin AAAPackageDev.build_sys_dev
reloading plugin AAAPackageDev.commands_file_dev
reloading plugin AAAPackageDev.completions_dev
reloading plugin AAAPackageDev.file_conversion
reloading plugin AAAPackageDev.scope_data
reloading plugin AAAPackageDev.settings_dev
reloading plugin AAAPackageDev.snippet_dev
reloading plugin AAAPackageDev.sublime_inspect
reloading plugin AAAPackageDev.syntax_def_dev
reloading plugin AdvancedNewFile.AdvancedNewFile
reloading plugin Alignment.Alignment
reloading plugin AlignTab.aligner
reloading plugin AlignTab.aligntab
reloading plugin AlignTab.hist
reloading plugin AlignTab.parser
reloading plugin AlignTab.table
reloading plugin AlignTab.wclen
reloading plugin Better CoffeeScript.CoffeeScript
reloading plugin Git.add
reloading plugin Git.annotate
reloading plugin Git.commit
reloading plugin Git.diff
reloading plugin Git.flow
reloading plugin Git.git
reloading plugin Git.history
reloading plugin Git.repo
reloading plugin Git.stash
reloading plugin Git.status
reloading plugin Git.statusbar
reloading plugin Highlight Build Errors.HighlightBuildErrors
reloading plugin Markdown Preview.helper
reloading plugin Markdown Preview.markdown_settings
reloading plugin Markdown Preview.markdown_wrapper
reloading plugin Markdown Preview.MarkdownPreview
reloading plugin Package Control.1_reloader
reloading plugin Package Control.2_bootstrap
reloading plugin Package Control.Package Control
reloading plugin PackageResourceViewer.package_resource_viewer
reloading plugin PackageResourceViewer.package_resources
reloading plugin Ruby Markers.ruby_markers
reloading plugin Schemr.schemr
reloading plugin SCSS.scss_completions
reloading plugin SmartMarkdown.headline
reloading plugin SmartMarkdown.headline_level
reloading plugin SmartMarkdown.headline_move
reloading plugin SmartMarkdown.pandoc_render
reloading plugin SmartMarkdown.smart_folding
reloading plugin SmartMarkdown.smart_list
reloading plugin SmartMarkdown.smart_table
reloading plugin SmartMarkdown.table
reloading plugin SmartMarkdown.utilities
reloading plugin SublimeOnSaveBuild.SublimeOnSaveBuild
reloading plugin Surround.Surround
reloading plugin Trailing Punctuation.trailing_punctuation
reloading plugin VAlign.valign
reloading plugin Vintageous.__init__
reloading plugin Vintageous.dev_cmds
reloading plugin Vintageous.ex_commands
reloading plugin Vintageous.ex_main
reloading plugin Vintageous.ex_motions
reloading plugin Vintageous.jump_list_cmds
reloading plugin Vintageous.modelines
reloading plugin Vintageous.state
reloading plugin Vintageous.test_runner
reloading plugin Vintageous.xactions
reloading plugin Vintageous.xmotions
reloading plugin Vintageous.xsupport
reloading plugin Vintageous.xsupport_mouse
reloading plugin SublimeREPL.__init__
reloading plugin SublimeREPL.completions
reloading plugin SublimeREPL.lang_integration
reloading plugin SublimeREPL.run_existing_command
reloading plugin SublimeREPL.sublimerepl
reloading plugin SublimeREPL.sublimerepl_build_system_hack
reloading plugin SublimeREPL.text_transfer
plugins loaded
Traceback (most recent call last):
  File "/Applications/Sublime Text.app/Contents/MacOS/sublime_plugin.py", line 550, in run_
    return self.run(edit, **args)
  File "xactions in /Users/rtfeldman/Library/Application Support/Sublime Text 3/Installed Packages/Vintageous.sublime-package", line 320, in run
AttributeError: 'NoneType' object has no attribute 'run_command'
Package Control: Skipping automatic upgrade, last run at 2016-01-05 23:26:09, next run at 2016-01-06 00:26:09 or after
ignored packages updated to: ["Elm Language Support", "Vintage"]
reloading Packages/User/Package Control.sublime-settings
ignored packages updated to: ["Vintage"]
reloading Packages/User/Package Control.sublime-settings
reloading Packages/User/Preferences.sublime-settings
reloading plugin Elm Language Support.elm_format
reloading plugin Elm Language Support.elm_generate
reloading plugin Elm Language Support.elm_make
reloading plugin Elm Language Support.elm_open_in_browser
reloading plugin Elm Language Support.elm_plugin
reloading plugin Elm Language Support.elm_project
reloading plugin Elm Language Support.elm_show_type
generating meta info summary
generating syntax summary
Traceback (most recent call last):
  File "/Applications/Sublime Text.app/Contents/MacOS/sublime_plugin.py", line 312, in on_activated_async
    callback.on_activated_async(v)
  File "/Users/rtfeldman/Library/Application Support/Sublime Text 3/Packages/Elm Language Support/elm_show_type.py", line 106, in on_activated_async
    sel = view.sel()[0]
  File "/Applications/Sublime Text.app/Contents/MacOS/sublime.py", line 513, in __getitem__
    raise IndexError()
IndexError
dict_keys([])
Traceback (most recent call last):
  File "/Users/rtfeldman/Library/Application Support/Sublime Text 3/Packages/Elm Language Support/elm_show_type.py", line 67, in <lambda>
    sublime.set_timeout_async(lambda: query(filename, word, tries + 1), 100)
NameError: global name 'word' is not defined
Traceback (most recent call last):
  File "/Users/rtfeldman/Library/Application Support/Sublime Text 3/Packages/Elm Language Support/elm_show_type.py", line 67, in <lambda>
    sublime.set_timeout_async(lambda: query(filename, word, tries + 1), 100)
NameError: global name 'word' is not defined
Traceback (most recent call last):
  File "/Users/rtfeldman/Library/Application Support/Sublime Text 3/Packages/Elm Language Support/elm_show_type.py", line 67, in <lambda>
    sublime.set_timeout_async(lambda: query(filename, word, tries + 1), 100)
NameError: global name 'word' is not defined
Traceback (most recent call last):
  File "/Users/rtfeldman/Library/Application Support/Sublime Text 3/Packages/Elm Language Support/elm_show_type.py", line 67, in <lambda>
    sublime.set_timeout_async(lambda: query(filename, word, tries + 1), 100)
NameError: global name 'word' is not defined
Traceback (most recent call last):
  File "/Users/rtfeldman/Library/Application Support/Sublime Text 3/Packages/Elm Language Support/elm_show_type.py", line 67, in <lambda>
    sublime.set_timeout_async(lambda: query(filename, word, tries + 1), 100)
NameError: global name 'word' is not defined
Traceback (most recent call last):
  File "/Users/rtfeldman/Library/Application Support/Sublime Text 3/Packages/Elm Language Support/elm_show_type.py", line 67, in <lambda>
    sublime.set_timeout_async(lambda: query(filename, word, tries + 1), 100)
NameError: global name 'word' is not defined
dict_keys([])
Running elm-make /Users/rtfeldman/code/elm-css/src/Css/Util.elm --output=/dev/null --report=json --yes
dict_keys([])
deadfoxygrandpa commented 8 years ago

OK, looks like I clobbered something in a bad merge. I'm pretty sure I know what's wrong and I can fix it tonight.

deadfoxygrandpa commented 8 years ago

@rtfeldman Try it now. I think I fixed your issue, as well as added the elm-oracle based autocompletions I had worked on since I tried to push the previous beta version.

rtfeldman commented 8 years ago

So I ended up reinstalling Sublime to try and verify what was going on. Here's my current status:

It's worth noting that:

Console output, in case it helps:

startup, version: 3083 osx x64 channel: stable
executable: /Applications/Sublime Text.app/Contents/MacOS/Sublime Text
working dir: /
packages path: /Users/rtfeldman/Library/Application Support/Sublime Text 3/Packages
state path: /Users/rtfeldman/Library/Application Support/Sublime Text 3/Local
zip path: /Applications/Sublime Text.app/Contents/MacOS/Packages
zip path: /Users/rtfeldman/Library/Application Support/Sublime Text 3/Installed Packages
ignored_packages: ["Vintage"]
pre session restore time: 0.484201
using gpu buffer for window
using gpu buffer for window
startup time: 0.548809
first paint time: 0.617815
reloading plugin Default.block
reloading plugin Default.comment
reloading plugin Default.copy_path
reloading plugin Default.delete_word
reloading plugin Default.detect_indentation
reloading plugin Default.duplicate_line
reloading plugin Default.echo
reloading plugin Default.exec
reloading plugin Default.fold
reloading plugin Default.font
reloading plugin Default.goto_line
reloading plugin Default.history_list
reloading plugin Default.indentation
reloading plugin Default.kill_ring
reloading plugin Default.mark
reloading plugin Default.new_templates
reloading plugin Default.open_context_url
reloading plugin Default.open_file_settings
reloading plugin Default.open_in_browser
reloading plugin Default.pane
reloading plugin Default.paragraph
reloading plugin Default.paste_from_history
reloading plugin Default.quick_panel
reloading plugin Default.save_on_focus_lost
reloading plugin Default.scroll
reloading plugin Default.set_unsaved_view_name
reloading plugin Default.side_bar
reloading plugin Default.sort
reloading plugin Default.swap_line
reloading plugin Default.switch_file
reloading plugin Default.symbol
reloading plugin Default.transform
reloading plugin Default.transpose
reloading plugin Default.trim_trailing_white_space
reloading plugin CSS.css_completions
reloading plugin Diff.diff
reloading plugin HTML.encode_html_entities
reloading plugin HTML.html_completions
reloading plugin 0_package_control_loader.00-package_control
reloading plugin 0_package_control_loader.01-pygments
reloading plugin 0_package_control_loader.02-bz2
reloading plugin 0_package_control_loader.50-pyyaml
reloading plugin AAAPackageDev.AAA
[AAAPackageDev] Added /Users/rtfeldman/Library/Application Support/Sublime Text 3/Installed Packages/AAAPackageDev.sublime-package/Lib to sys.path.
[AAAPackageDev] Added /Users/rtfeldman/Library/Application Support/Sublime Text 3/Installed Packages/AAAPackageDev.sublime-package/Lib/_py3 to sys.path.
reloading plugin AAAPackageDev.build_sys_dev
reloading plugin AAAPackageDev.commands_file_dev
reloading plugin AAAPackageDev.completions_dev
reloading plugin AAAPackageDev.file_conversion
reloading plugin AAAPackageDev.scope_data
reloading plugin AAAPackageDev.settings_dev
reloading plugin AAAPackageDev.snippet_dev
reloading plugin AAAPackageDev.sublime_inspect
reloading plugin AAAPackageDev.syntax_def_dev
reloading plugin AdvancedNewFile.AdvancedNewFile
reloading plugin Alignment.Alignment
reloading plugin AlignTab.aligner
reloading plugin AlignTab.aligntab
reloading plugin AlignTab.hist
reloading plugin AlignTab.parser
reloading plugin AlignTab.table
reloading plugin AlignTab.wclen
reloading plugin Better CoffeeScript.CoffeeScript
reloading plugin Git.add
reloading plugin Git.annotate
reloading plugin Git.commit
reloading plugin Git.diff
reloading plugin Git.flow
reloading plugin Git.git
reloading plugin Git.history
reloading plugin Git.repo
reloading plugin Git.stash
reloading plugin Git.status
reloading plugin Git.statusbar
reloading plugin Highlight Build Errors.HighlightBuildErrors
reloading plugin Markdown Preview.helper
reloading plugin Markdown Preview.markdown_settings
reloading plugin Markdown Preview.markdown_wrapper
reloading plugin Markdown Preview.MarkdownPreview
reloading plugin Package Control.1_reloader
reloading plugin Package Control.2_bootstrap
reloading plugin Package Control.Package Control
reloading plugin PackageResourceViewer.package_resource_viewer
reloading plugin PackageResourceViewer.package_resources
reloading plugin Ruby Markers.ruby_markers
reloading plugin Schemr.schemr
reloading plugin SCSS.scss_completions
reloading plugin SmartMarkdown.headline
reloading plugin SmartMarkdown.headline_level
reloading plugin SmartMarkdown.headline_move
reloading plugin SmartMarkdown.pandoc_render
reloading plugin SmartMarkdown.smart_folding
reloading plugin SmartMarkdown.smart_list
reloading plugin SmartMarkdown.smart_table
reloading plugin SmartMarkdown.table
reloading plugin SmartMarkdown.utilities
reloading plugin Surround.Surround
reloading plugin Trailing Punctuation.trailing_punctuation
reloading plugin VAlign.valign
reloading plugin Vintageous.__init__
reloading plugin Vintageous.dev_cmds
reloading plugin Vintageous.ex_commands
reloading plugin Vintageous.ex_main
reloading plugin Vintageous.ex_motions
reloading plugin Vintageous.jump_list_cmds
reloading plugin Vintageous.modelines
reloading plugin Vintageous.state
reloading plugin Vintageous.test_runner
reloading plugin Vintageous.xactions
reloading plugin Vintageous.xmotions
reloading plugin Vintageous.xsupport
reloading plugin Vintageous.xsupport_mouse
reloading plugin Elm Language Support.elm_format
reloading plugin Elm Language Support.elm_generate
reloading plugin Elm Language Support.elm_make
reloading plugin Elm Language Support.elm_open_in_browser
reloading plugin Elm Language Support.elm_plugin
reloading plugin Elm Language Support.elm_project
reloading plugin Elm Language Support.elm_show_type
reloading plugin SublimeREPL.__init__
reloading plugin SublimeREPL.completions
reloading plugin SublimeREPL.lang_integration
reloading plugin SublimeREPL.run_existing_command
reloading plugin SublimeREPL.sublimerepl
reloading plugin SublimeREPL.sublimerepl_build_system_hack
reloading plugin SublimeREPL.text_transfer
plugins loaded
Package Control: Skipping automatic upgrade, last run at 2016-01-06 10:19:24, next run at 2016-01-06 11:19:24 or after
Running elm-make /Users/rtfeldman/code/elm-css/src/Css/Util.elm --output=/dev/null --report=json --yes
Running elm-make /Users/rtfeldman/code/elm-css/src/Css/Util.elm --output=/dev/null --report=json --yes
Running elm-make /Users/rtfeldman/code/elm-css/src/Css/Util.elm --output=/dev/null --report=json --yes
ignored packages updated to: ["Elm Language Support", "Vintage"]
unloading plugin Elm Language Support.elm_format
unloading plugin Elm Language Support.elm_generate
unloading plugin Elm Language Support.elm_make
unloading plugin Elm Language Support.elm_open_in_browser
unloading plugin Elm Language Support.elm_plugin
unloading plugin Elm Language Support.elm_project
unloading plugin Elm Language Support.elm_show_type
reloading Packages/Elm Language Support/Settings/Elm Language Support.sublime-settings
reloading Packages/Elm Language Support/Settings/Elm.sublime-settings
generating syntax summary
generating meta info summary
reloading Packages/User/Package Control.sublime-settings
Package Control: The package Elm Language Support has been removed
ignored packages updated to: ["Vintage"]
reloading Packages/User/Package Control.sublime-settings
reloading Packages/User/Preferences.sublime-settings
ignored packages updated to: ["Elm Language Support", "Vintage"]
reloading Packages/User/Package Control.sublime-settings
reloading Packages/User/Preferences.sublime-settings
ignored packages updated to: ["Vintage"]
reloading Packages/User/Package Control.sublime-settings
reloading Packages/User/Preferences.sublime-settings
reloading plugin Elm Language Support.elm_format
reloading plugin Elm Language Support.elm_generate
reloading plugin Elm Language Support.elm_make
reloading plugin Elm Language Support.elm_open_in_browser
reloading plugin Elm Language Support.elm_plugin
reloading plugin Elm Language Support.elm_project
reloading plugin Elm Language Support.elm_show_type
generating meta info summary
reloading Packages/Elm Language Support/Settings/Elm Language Support.sublime-settings
reloading Packages/Elm Language Support/Settings/Elm.sublime-settings
generating syntax summary
Running elm-make /Users/rtfeldman/code/elm-css/src/Css/Util.elm --output=/dev/null --report=json --yes
no command for selector: noop:
Running elm-make /Users/rtfeldman/code/elm-css/src/Css/Util.elm --output=/dev/null --report=json --yes
rtfeldman commented 8 years ago

Update: reinstalled everything again, and now elm-format integration works in addition to Elm Make working.

Still does not appear that it is attempting to use elm-oracle though.

rtfeldman commented 8 years ago

Update 2: elm-format spontaneously started refusing to run again, either on save or when run from the command palette. :disappointed: This is still true even after restarting Sublime, reinstalling the plugin, and restarting Sublime again; haven't successfully gotten it to run again. The Elm Make build still works fine though.

Maybe I should open a separate issue for that?

rtfeldman commented 8 years ago

elm-format works again, after closing some individual windows as opposed to closing all of Sublime Text and reopening it again. No idea what that implies about the symptoms, but for now just happy it works again. :smile:

deadfoxygrandpa commented 8 years ago

You mean you had multiple Sublime Text windows open and closing some of them helped? I don't have any ideas right now what's going on. I can try adding a debug mode that prints out more logs, I guess.

Do you have elm-oracle installed? What happens when you go to the root directory of your project and run elm-oracle Main.elm "" (substituting Main.elm for whatever source file you're checking)

rtfeldman commented 8 years ago

You mean you had multiple Sublime Text windows open and closing some of them helped? I don't have any ideas right now what's going on. I can try adding a debug mode that prints out more logs, I guess.

I'm able to consistently reproduce this now. Here's what happens:

  1. I open Sublime text by using the subl command line command
  2. elm-format works fine
  3. I quit Sublime Text
  4. I reopen Sublime Text, using the normal OS X application launcher rather than the subl command.
  5. Now elm-format no longer runs on save, or when used from the command palette.
  6. I open a new Sublime window by using subl . elm-format still does not work on either window - neither the first one I opened via the normal application launcher, nor the second one I opened via subl .
  7. I close both of those windows, such that the Sublime Text process is still running but has no open windows
  8. I open a project with the subl command line again
  9. elm-format works again

So if I were to describe what conceptually appears to be happening, it would be:

  1. elm-format works if I open Sublime via subl and have either no open windows, or the only open windows I have were opened via subl
  2. If I open Sublime via the application launcher, elm-format does not work anywhere, including if I add new windows via subl
  3. The only way to get from state 2 back to state 1 is to close all the windows and open the first one via subl.

What happens when you go to the root directory of your project and run elm-oracle Main.elm "" (substituting Main.elm for whatever source file you're checking)

$ elm-oracle src/Css.elm ""
[{"name":"Mailbox","fullName":"Signal.Mailbox","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Signal#Mailbox","signature":"{ address : Signal.Address a, signal : Signal.Signal a }","comment":" A `Mailbox` is a communication hub. It is made up of\n\n  * an `Address` that you can send messages to\n  * a `Signal` of messages sent to the mailbox\n"},{"name":"constant","fullName":"Signal.constant","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Signal#constant","signature":"a -> Signal.Signal a","comment":" Create a signal that never changes. This can be useful if you need\nto pass a combination of signals and normal values to a function:\n\n    map3 view Window.dimensions Mouse.position (constant initialModel)\n"},{"name":"dropRepeats","fullName":"Signal.dropRepeats","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Signal#dropRepeats","signature":"Signal.Signal a -> Signal.Signal a","comment":" Drop updates that repeat the current value of the signal.\n\n    numbers : Signal Int\n\n    noDups : Signal Int\n    noDups =\n        dropRepeats numbers\n\n    --  numbers => 0 0 3 3 5 5 5 4 ...\n    --  noDups  => 0   3   5     4 ...\n\nThe signal should not be a signal of functions, or a record that contains a\nfunction (you'll get a runtime error since functions cannot be equated).\n"},{"name":"filter","fullName":"Signal.filter","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Signal#filter","signature":"(a -> Bool) -> a -> Signal.Signal a -> Signal.Signal a","comment":" Filter out some updates. The given function decides whether we should\n*keep* an update. If no updates ever flow through, we use the default value\nprovided. The following example only keeps even numbers and has an initial\nvalue of zero.\n\n    numbers : Signal Int\n\n    isEven : Int -> Bool\n\n    evens : Signal Int\n    evens =\n        filter isEven 0 numbers\n"},{"name":"filterMap","fullName":"Signal.filterMap","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Signal#filterMap","signature":"(a -> Maybe.Maybe b) -> b -> Signal.Signal a -> Signal.Signal b","comment":" Filter out some updates. When the filter function gives back `Just` a\nvalue, we send that value along. When it returns `Nothing` we drop it.\nIf the initial value of the incoming signal turns into `Nothing`, we use the\ndefault value provided. The following example keeps only strings that can be\nread as integers.\n\n    userInput : Signal String\n\n    toInt : String -> Maybe Int\n\n    numbers : Signal Int\n    numbers =\n        filterMap toInt 0 userInput\n"},{"name":"foldp","fullName":"Signal.foldp","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Signal#foldp","signature":"(a -> state -> state) -> state -> Signal.Signal a -> Signal.Signal state","comment":" Create a past-dependent signal. Each update from the incoming signals will\nbe used to step the state forward. The outgoing signal represents the current\nstate.\n\n    clickCount : Signal Int\n    clickCount =\n        foldp (\\click total -> total + 1) 0 Mouse.clicks\n\n    timeSoFar : Signal Time\n    timeSoFar =\n        foldp (+) 0 (fps 40)\n\nSo `clickCount` updates on each mouse click, incrementing by one. `timeSoFar`\nis the time the program has been running, updated 40 times a second.\n"},{"name":"forwardTo","fullName":"Signal.forwardTo","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Signal#forwardTo","signature":"Signal.Address b -> (a -> b) -> Signal.Address a","comment":" Create a new address. This address will tag each message it receives\nand then forward it along to some other address.\n\n    type Action = Undo | Remove Int | NoOp\n\n    actions : Mailbox Action\n    actions = mailbox NoOp\n\n    removeAddress : Address Int\n    removeAddress =\n        forwardTo actions.address Remove\n\nIn this case we have a general `address` that many people may send\nmessages to. The new `removeAddress` tags all messages with the `Remove` tag\nbefore forwarding them along to the more general `address`. This means\nsome parts of our application can know *only* about `removeAddress` and not\ncare what other kinds of `Actions` are possible.\n"},{"name":"mailbox","fullName":"Signal.mailbox","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Signal#mailbox","signature":"a -> Signal.Mailbox a","comment":" Create a mailbox you can send messages to. The primary use case is\nreceiving updates from tasks and UI elements. The argument is a default value\nfor the custom signal.\n\nNote: Creating new signals is inherently impure, so `(mailbox ())` and\n`(mailbox ())` produce two different mailboxes.\n"},{"name":"map","fullName":"Signal.map","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Signal#map","signature":"(a -> result) -> Signal.Signal a -> Signal.Signal result","comment":" Apply a function to a signal.\n\n    mouseIsUp : Signal Bool\n    mouseIsUp =\n        map not Mouse.isDown\n\n    main : Signal Element\n    main =\n        map Graphics.Element.show Mouse.position\n"},{"name":"map2","fullName":"Signal.map2","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Signal#map2","signature":"(a -> b -> result) -> Signal.Signal a -> Signal.Signal b -> Signal.Signal result","comment":" Apply a function to the current value of two signals. The function\nis reevaluated whenever *either* signal changes. In the following example, we\nfigure out the `aspectRatio` of the window by combining the current width and\nheight.\n\n    ratio : Int -> Int -> Float\n    ratio width height =\n        toFloat width / toFloat height\n\n    aspectRatio : Signal Float\n    aspectRatio =\n        map2 ratio Window.width Window.height\n"},{"name":"map3","fullName":"Signal.map3","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Signal#map3","signature":"(a -> b -> c -> result) -> Signal.Signal a -> Signal.Signal b -> Signal.Signal c -> Signal.Signal result","comment":""},{"name":"map4","fullName":"Signal.map4","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Signal#map4","signature":"(a -> b -> c -> d -> result) -> Signal.Signal a -> Signal.Signal b -> Signal.Signal c -> Signal.Signal d -> Signal.Signal result","comment":""},{"name":"map5","fullName":"Signal.map5","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Signal#map5","signature":"(a -> b -> c -> d -> e -> result) -> Signal.Signal a -> Signal.Signal b -> Signal.Signal c -> Signal.Signal d -> Signal.Signal e -> Signal.Signal result","comment":""},{"name":"merge","fullName":"Signal.merge","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Signal#merge","signature":"Signal.Signal a -> Signal.Signal a -> Signal.Signal a","comment":" Merge two signals into one. This function is extremely useful for bringing\ntogether lots of different signals to feed into a `foldp`.\n\n    type Update = MouseMove (Int,Int) | TimeDelta Float\n\n    updates : Signal Update\n    updates =\n        merge\n            (map MouseMove Mouse.position)\n            (map TimeDelta (fps 40))\n\nIf an update comes from either of the incoming signals, it updates the outgoing\nsignal. If an update comes on both signals at the same time, the update provided\nby the left input signal wins (i.e., the update from the second signal is discarded).\n"},{"name":"mergeMany","fullName":"Signal.mergeMany","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Signal#mergeMany","signature":"List (Signal.Signal a) -> Signal.Signal a","comment":" Merge many signals into one. This is useful when you are merging more than\ntwo signals. When multiple updates come in at the same time, the left-most\nupdate wins, just like with `merge`.\n\n    type Update = MouseMove (Int,Int) | TimeDelta Float | Click\n\n    updates : Signal Update\n    updates =\n        mergeMany\n            [ map MouseMove Mouse.position\n            , map TimeDelta (fps 40)\n            , map (always Click) Mouse.clicks\n            ]\n"},{"name":"message","fullName":"Signal.message","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Signal#message","signature":"Signal.Address a -> a -> Signal.Message","comment":" Create a message that may be sent to a `Mailbox` at a later time.\n\nMost importantly, this lets us create APIs that can send values to ports\n*without* allowing people to run arbitrary tasks.\n"},{"name":"sampleOn","fullName":"Signal.sampleOn","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Signal#sampleOn","signature":"Signal.Signal a -> Signal.Signal b -> Signal.Signal b","comment":" Sample from the second input every time an event occurs on the first input.\nFor example, `(sampleOn Mouse.clicks (Time.every Time.second))` will give the\napproximate time of the latest click. "},{"name":"send","fullName":"Signal.send","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Signal#send","signature":"Signal.Address a -> a -> Task.Task x ()","comment":" Send a message to an `Address`.\n\n    type Action = Undo | Remove Int\n\n    address : Address Action\n\n    requestUndo : Task x ()\n    requestUndo =\n        send address Undo\n\nThe `Signal` associated with `address` will receive the `Undo` message\nand push it through the Elm program.\n"},{"name":"all","fullName":"String.all","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#all","signature":"(Char -> Bool) -> String -> Bool","comment":" Determine whether *all* characters satisfy a predicate.\n\n    all isDigit \"90210\" == True\n    all isDigit \"R2-D2\" == False\n    all isDigit \"heart\" == False\n"},{"name":"any","fullName":"String.any","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#any","signature":"(Char -> Bool) -> String -> Bool","comment":" Determine whether *any* characters satisfy a predicate.\n\n    any isDigit \"90210\" == True\n    any isDigit \"R2-D2\" == True\n    any isDigit \"heart\" == False\n"},{"name":"append","fullName":"String.append","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#append","signature":"String -> String -> String","comment":" Append two strings. You can also use [the `(++)` operator](Basics#++)\nto do this.\n\n    append \"butter\" \"fly\" == \"butterfly\"\n"},{"name":"concat","fullName":"String.concat","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#concat","signature":"List String -> String","comment":" Concatenate many strings into one.\n\n    concat [\"never\",\"the\",\"less\"] == \"nevertheless\"\n"},{"name":"cons","fullName":"String.cons","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#cons","signature":"Char -> String -> String","comment":" Add a character to the beginning of a string. "},{"name":"contains","fullName":"String.contains","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#contains","signature":"String -> String -> Bool","comment":" See if the second string contains the first one.\n\n    contains \"the\" \"theory\" == True\n    contains \"hat\" \"theory\" == False\n    contains \"THE\" \"theory\" == False\n\nUse [`Regex.contains`](Regex#contains) if you need something more flexible.\n"},{"name":"dropLeft","fullName":"String.dropLeft","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#dropLeft","signature":"Int -> String -> String","comment":" Drop *n* characters from the left side of a string. "},{"name":"dropRight","fullName":"String.dropRight","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#dropRight","signature":"Int -> String -> String","comment":" Drop *n* characters from the right side of a string. "},{"name":"endsWith","fullName":"String.endsWith","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#endsWith","signature":"String -> String -> Bool","comment":" See if the second string ends with the first one.\n\n    endsWith \"the\" \"theory\" == False\n    endsWith \"ory\" \"theory\" == True\n"},{"name":"filter","fullName":"String.filter","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#filter","signature":"(Char -> Bool) -> String -> String","comment":" Keep only the characters that satisfy the predicate.\n\n    filter isDigit \"R2-D2\" == \"22\"\n"},{"name":"foldl","fullName":"String.foldl","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#foldl","signature":"(Char -> b -> b) -> b -> String -> b","comment":" Reduce a string from the left.\n\n    foldl cons \"\" \"time\" == \"emit\"\n"},{"name":"foldr","fullName":"String.foldr","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#foldr","signature":"(Char -> b -> b) -> b -> String -> b","comment":" Reduce a string from the right.\n\n    foldr cons \"\" \"time\" == \"time\"\n"},{"name":"fromChar","fullName":"String.fromChar","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#fromChar","signature":"Char -> String","comment":" Create a string from a given character.\n\n    fromChar 'a' == \"a\"\n"},{"name":"fromList","fullName":"String.fromList","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#fromList","signature":"List Char -> String","comment":" Convert a list of characters into a String. Can be useful if you\nwant to create a string primarily by consing, perhaps for decoding\nsomething.\n\n    fromList ['a','b','c'] == \"abc\"\n"},{"name":"indexes","fullName":"String.indexes","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#indexes","signature":"String -> String -> List Int","comment":" Get all of the indexes for a substring in another string.\n\n    indexes \"i\" \"Mississippi\"   == [1,4,7,10]\n    indexes \"ss\" \"Mississippi\"  == [2,5]\n    indexes \"needle\" \"haystack\" == []\n"},{"name":"indices","fullName":"String.indices","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#indices","signature":"String -> String -> List Int","comment":" Alias for `indexes`. "},{"name":"isEmpty","fullName":"String.isEmpty","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#isEmpty","signature":"String -> Bool","comment":" Determine if a string is empty.\n\n    isEmpty \"\" == True\n    isEmpty \"the world\" == False\n"},{"name":"join","fullName":"String.join","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#join","signature":"String -> List String -> String","comment":" Put many strings together with a given separator.\n\n    join \"a\" [\"H\",\"w\",\"ii\",\"n\"]        == \"Hawaiian\"\n    join \" \" [\"cat\",\"dog\",\"cow\"]       == \"cat dog cow\"\n    join \"/\" [\"home\",\"evan\",\"Desktop\"] == \"home/evan/Desktop\"\n"},{"name":"left","fullName":"String.left","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#left","signature":"Int -> String -> String","comment":" Take *n* characters from the left side of a string. "},{"name":"length","fullName":"String.length","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#length","signature":"String -> Int","comment":" Get the length of a string.\n\n    length \"innumerable\" == 11\n    length \"\" == 0\n\n"},{"name":"lines","fullName":"String.lines","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#lines","signature":"String -> List String","comment":" Break a string into lines, splitting on newlines.\n\n    lines \"How are you?\\nGood?\" == [\"How are you?\", \"Good?\"]\n"},{"name":"map","fullName":"String.map","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#map","signature":"(Char -> Char) -> String -> String","comment":" Transform every character in a string\n\n    map (\\c -> if c == '/' then '.' else c) \"a/b/c\" == \"a.b.c\"\n"},{"name":"pad","fullName":"String.pad","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#pad","signature":"Int -> Char -> String -> String","comment":" Pad a string on both sides until it has a given length.\n\n    pad 5 ' ' \"1\"   == \"  1  \"\n    pad 5 ' ' \"11\"  == \"  11 \"\n    pad 5 ' ' \"121\" == \" 121 \"\n"},{"name":"padLeft","fullName":"String.padLeft","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#padLeft","signature":"Int -> Char -> String -> String","comment":" Pad a string on the left until it has a given length.\n\n    padLeft 5 '.' \"1\"   == \"....1\"\n    padLeft 5 '.' \"11\"  == \"...11\"\n    padLeft 5 '.' \"121\" == \"..121\"\n"},{"name":"padRight","fullName":"String.padRight","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#padRight","signature":"Int -> Char -> String -> String","comment":" Pad a string on the right until it has a given length.\n\n    padRight 5 '.' \"1\"   == \"1....\"\n    padRight 5 '.' \"11\"  == \"11...\"\n    padRight 5 '.' \"121\" == \"121..\"\n"},{"name":"repeat","fullName":"String.repeat","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#repeat","signature":"Int -> String -> String","comment":" Repeat a string *n* times.\n\n    repeat 3 \"ha\" == \"hahaha\"\n"},{"name":"reverse","fullName":"String.reverse","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#reverse","signature":"String -> String","comment":" Reverse a string.\n\n    reverse \"stressed\" == \"desserts\"\n"},{"name":"right","fullName":"String.right","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#right","signature":"Int -> String -> String","comment":" Take *n* characters from the right side of a string. "},{"name":"slice","fullName":"String.slice","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#slice","signature":"Int -> Int -> String -> String","comment":" Take a substring given a start and end index. Negative indexes\nare taken starting from the *end* of the list.\n\n    slice  7  9 \"snakes on a plane!\" == \"on\"\n    slice  0  6 \"snakes on a plane!\" == \"snakes\"\n    slice  0 -7 \"snakes on a plane!\" == \"snakes on a\"\n    slice -6 -1 \"snakes on a plane!\" == \"plane\"\n"},{"name":"split","fullName":"String.split","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#split","signature":"String -> String -> List String","comment":" Split a string using a given separator.\n\n    split \",\" \"cat,dog,cow\"        == [\"cat\",\"dog\",\"cow\"]\n    split \"/\" \"home/evan/Desktop/\" == [\"home\",\"evan\",\"Desktop\", \"\"]\n\nUse [`Regex.split`](Regex#split) if you need something more flexible.\n"},{"name":"startsWith","fullName":"String.startsWith","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#startsWith","signature":"String -> String -> Bool","comment":" See if the second string starts with the first one.\n\n    startsWith \"the\" \"theory\" == True\n    startsWith \"ory\" \"theory\" == False\n"},{"name":"toFloat","fullName":"String.toFloat","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#toFloat","signature":"String -> Result.Result String Float","comment":" Try to convert a string into a float, failing on improperly formatted strings.\n\n    toFloat \"123\" == Ok 123.0\n    toFloat \"-42\" == Ok -42.0\n    toFloat \"3.1\" == Ok 3.1\n    toFloat \"31a\" == Err \"could not convert string '31a' to a Float\"\n"},{"name":"toInt","fullName":"String.toInt","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#toInt","signature":"String -> Result.Result String Int","comment":" Try to convert a string into an int, failing on improperly formatted strings.\n\n    toInt \"123\" == Ok 123\n    toInt \"-42\" == Ok -42\n    toInt \"3.1\" == Err \"could not convert string '3.1' to an Int\"\n    toInt \"31a\" == Err \"could not convert string '31a' to an Int\"\n"},{"name":"toList","fullName":"String.toList","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#toList","signature":"String -> List Char","comment":" Convert a string to a list of characters.\n\n    toList \"abc\" == ['a','b','c']\n"},{"name":"toLower","fullName":"String.toLower","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#toLower","signature":"String -> String","comment":" Convert a string to all lower case. Useful for case-insensitive comparisons. "},{"name":"toUpper","fullName":"String.toUpper","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#toUpper","signature":"String -> String","comment":" Convert a string to all upper case. Useful for case-insensitive comparisons\nand VIRTUAL YELLING.\n"},{"name":"trim","fullName":"String.trim","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#trim","signature":"String -> String","comment":" Get rid of whitespace on both sides of a string.\n\n    trim \"  hats  \\n\" == \"hats\"\n"},{"name":"trimLeft","fullName":"String.trimLeft","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#trimLeft","signature":"String -> String","comment":" Get rid of whitespace on the left of a string.\n\n    trimLeft \"  hats  \\n\" == \"hats  \\n\"\n"},{"name":"trimRight","fullName":"String.trimRight","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#trimRight","signature":"String -> String","comment":" Get rid of whitespace on the right of a string.\n\n    trimRight \"  hats  \\n\" == \"  hats\"\n"},{"name":"uncons","fullName":"String.uncons","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#uncons","signature":"String -> Maybe.Maybe ( Char, String )","comment":" Split a non-empty string into its head and tail. This lets you\npattern match on strings exactly as you would with lists.\n\n    uncons \"abc\" == Just ('a',\"bc\")\n    uncons \"\"    == Nothing\n"},{"name":"words","fullName":"String.words","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/String#words","signature":"String -> List String","comment":" Break a string into words, splitting on chunks of whitespace.\n\n    words \"How are \\t you? \\n Good?\" == [\"How\",\"are\",\"you?\",\"Good?\"]\n"},{"name":"::","fullName":"List.::","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#::","signature":"a -> List a -> List a","comment":" Add an element to the front of a list. Pronounced *cons*.\n\n    1 :: [2,3] == [1,2,3]\n    1 :: [] == [1]\n"},{"name":"::","fullName":"List.::","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#::","signature":"a -> List a -> List a","comment":" Add an element to the front of a list. Pronounced *cons*.\n\n    1 :: [2,3] == [1,2,3]\n    1 :: [] == [1]\n"},{"name":"all","fullName":"List.all","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#all","signature":"(a -> Bool) -> List a -> Bool","comment":" Determine if all elements satisfy the predicate.\n\n    all isEven [2,4] == True\n    all isEven [2,3] == False\n    all isEven [] == True\n"},{"name":"any","fullName":"List.any","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#any","signature":"(a -> Bool) -> List a -> Bool","comment":" Determine if any elements satisfy the predicate.\n\n    any isEven [2,3] == True\n    any isEven [1,3] == False\n    any isEven [] == False\n"},{"name":"append","fullName":"List.append","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#append","signature":"List a -> List a -> List a","comment":" Put two lists together.\n\n    append [1,1,2] [3,5,8] == [1,1,2,3,5,8]\n    append ['a','b'] ['c'] == ['a','b','c']\n"},{"name":"concat","fullName":"List.concat","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#concat","signature":"List (List a) -> List a","comment":" Concatenate a bunch of lists into a single list:\n\n    concat [[1,2],[3],[4,5]] == [1,2,3,4,5]\n"},{"name":"concatMap","fullName":"List.concatMap","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#concatMap","signature":"(a -> List b) -> List a -> List b","comment":" Map a given function onto a list and flatten the resulting lists.\n\n    concatMap f xs == concat (map f xs)\n"},{"name":"drop","fullName":"List.drop","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#drop","signature":"Int -> List a -> List a","comment":" Drop the first *n* members of a list.\n\n    drop 2 [1,2,3,4] == [3,4]\n"},{"name":"filter","fullName":"List.filter","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#filter","signature":"(a -> Bool) -> List a -> List a","comment":" Keep only elements that satisfy the predicate.\n\n    filter isEven [1..6] == [2,4,6]\n"},{"name":"filterMap","fullName":"List.filterMap","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#filterMap","signature":"(a -> Maybe.Maybe b) -> List a -> List b","comment":" Apply a function that may succeed to all values in the list, but only keep\nthe successes.\n\n    String.toInt : String -> Maybe Int\n\n    filterMap String.toInt [\"3\", \"4.0\", \"5\", \"hats\"] == [3,5]\n"},{"name":"foldl","fullName":"List.foldl","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#foldl","signature":"(a -> b -> b) -> b -> List a -> b","comment":" Reduce a list from the left.\n\n    foldl (::) [] [1,2,3] == [3,2,1]\n"},{"name":"foldr","fullName":"List.foldr","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#foldr","signature":"(a -> b -> b) -> b -> List a -> b","comment":" Reduce a list from the right.\n\n    foldr (+) 0 [1,2,3] == 6\n"},{"name":"head","fullName":"List.head","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#head","signature":"List a -> Maybe.Maybe a","comment":" Extract the first element of a list.\n\n    head [1,2,3] == Just 1\n    head [] == Nothing\n"},{"name":"indexedMap","fullName":"List.indexedMap","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#indexedMap","signature":"(Int -> a -> b) -> List a -> List b","comment":" Same as `map` but the function is also applied to the index of each\nelement (starting at zero).\n\n    indexedMap (,) [\"Tom\",\"Sue\",\"Bob\"] == [ (0,\"Tom\"), (1,\"Sue\"), (2,\"Bob\") ]\n"},{"name":"intersperse","fullName":"List.intersperse","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#intersperse","signature":"a -> List a -> List a","comment":" Places the given value between all members of the given list.\n\n    intersperse \"on\" [\"turtles\",\"turtles\",\"turtles\"] == [\"turtles\",\"on\",\"turtles\",\"on\",\"turtles\"]\n"},{"name":"isEmpty","fullName":"List.isEmpty","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#isEmpty","signature":"List a -> Bool","comment":" Determine if a list is empty.\n\n    isEmpty [] == True\n"},{"name":"length","fullName":"List.length","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#length","signature":"List a -> Int","comment":" Determine the length of a list.\n\n    length [1,2,3] == 3\n"},{"name":"map","fullName":"List.map","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#map","signature":"(a -> b) -> List a -> List b","comment":" Apply a function to every element of a list.\n\n    map sqrt [1,4,9] == [1,2,3]\n\n    map not [True,False,True] == [False,True,False]\n"},{"name":"map2","fullName":"List.map2","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#map2","signature":"(a -> b -> result) -> List a -> List b -> List result","comment":" Combine two lists, combining them with the given function.\nIf one list is longer, the extra elements are dropped.\n\n    map2 (+) [1,2,3] [1,2,3,4] == [2,4,6]\n\n    map2 (,) [1,2,3] ['a','b'] == [ (1,'a'), (2,'b') ]\n\n    pairs : List a -> List b -> List (a,b)\n    pairs lefts rights =\n        map2 (,) lefts rights\n"},{"name":"map3","fullName":"List.map3","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#map3","signature":"(a -> b -> c -> result) -> List a -> List b -> List c -> List result","comment":""},{"name":"map4","fullName":"List.map4","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#map4","signature":"(a -> b -> c -> d -> result) -> List a -> List b -> List c -> List d -> List result","comment":""},{"name":"map5","fullName":"List.map5","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#map5","signature":"(a -> b -> c -> d -> e -> result) -> List a -> List b -> List c -> List d -> List e -> List result","comment":""},{"name":"maximum","fullName":"List.maximum","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#maximum","signature":"List comparable -> Maybe.Maybe comparable","comment":" Find the maximum element in a non-empty list.\n\n    maximum [1,4,2] == Just 4\n    maximum []      == Nothing\n"},{"name":"member","fullName":"List.member","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#member","signature":"a -> List a -> Bool","comment":" Figure out whether a list contains a value.\n\n    member 9 [1,2,3,4] == False\n    member 4 [1,2,3,4] == True\n"},{"name":"minimum","fullName":"List.minimum","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#minimum","signature":"List comparable -> Maybe.Maybe comparable","comment":" Find the minimum element in a non-empty list.\n\n    minimum [3,2,1] == Just 1\n    minimum []      == Nothing\n"},{"name":"partition","fullName":"List.partition","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#partition","signature":"(a -> Bool) -> List a -> ( List a, List a )","comment":" Partition a list based on a predicate. The first list contains all values\nthat satisfy the predicate, and the second list contains all the value that do\nnot.\n\n    partition (\\x -> x < 3) [0..5] == ([0,1,2], [3,4,5])\n    partition isEven        [0..5] == ([0,2,4], [1,3,5])\n"},{"name":"product","fullName":"List.product","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#product","signature":"List number -> number","comment":" Get the product of the list elements.\n\n    product [1..4] == 24\n"},{"name":"repeat","fullName":"List.repeat","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#repeat","signature":"Int -> a -> List a","comment":" Create a list with *n* copies of a value:\n\n    repeat 3 (0,0) == [(0,0),(0,0),(0,0)]\n"},{"name":"reverse","fullName":"List.reverse","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#reverse","signature":"List a -> List a","comment":" Reverse a list.\n\n    reverse [1..4] == [4,3,2,1]\n"},{"name":"scanl","fullName":"List.scanl","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#scanl","signature":"(a -> b -> b) -> b -> List a -> List b","comment":" Reduce a list from the left, building up all of the intermediate results into a list.\n\n    scanl (+) 0 [1,2,3,4] == [0,1,3,6,10]\n"},{"name":"sort","fullName":"List.sort","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#sort","signature":"List comparable -> List comparable","comment":" Sort values from lowest to highest\n\n    sort [3,1,5] == [1,3,5]\n"},{"name":"sortBy","fullName":"List.sortBy","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#sortBy","signature":"(a -> comparable) -> List a -> List a","comment":" Sort values by a derived property.\n\n    alice = { name=\"Alice\", height=1.62 }\n    bob   = { name=\"Bob\"  , height=1.85 }\n    chuck = { name=\"Chuck\", height=1.76 }\n\n    sortBy .name   [chuck,alice,bob] == [alice,bob,chuck]\n    sortBy .height [chuck,alice,bob] == [alice,chuck,bob]\n\n    sortBy String.length [\"mouse\",\"cat\"] == [\"cat\",\"mouse\"]\n"},{"name":"sortWith","fullName":"List.sortWith","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#sortWith","signature":"(a -> a -> Basics.Order) -> List a -> List a","comment":" Sort values with a custom comparison function.\n\n    sortWith flippedComparison [1..5] == [5,4,3,2,1]\n\n    flippedComparison a b =\n        case compare a b of\n          LT -> GT\n          EQ -> EQ\n          GT -> LT\n\nThis is also the most general sort function, allowing you\nto define any other: `sort == sortWith compare`\n"},{"name":"sum","fullName":"List.sum","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#sum","signature":"List number -> number","comment":" Get the sum of the list elements.\n\n    sum [1..4] == 10\n"},{"name":"tail","fullName":"List.tail","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#tail","signature":"List a -> Maybe.Maybe (List a)","comment":" Extract the rest of the list.\n\n    tail [1,2,3] == Just [2,3]\n    tail [] == Nothing\n"},{"name":"take","fullName":"List.take","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#take","signature":"Int -> List a -> List a","comment":" Take the first *n* members of a list.\n\n    take 2 [1,2,3,4] == [1,2]\n"},{"name":"unzip","fullName":"List.unzip","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/List#unzip","signature":"List ( a, b ) -> ( List a, List b )","comment":" Decompose a list of tuples into a tuple of lists.\n\n    unzip [(0, True), (17, False), (1337, True)] == ([0,17,1337], [True,False,True])\n"},{"name":"andThen","fullName":"Result.andThen","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Result#andThen","signature":"Result.Result x a -> (a -> Result.Result x b) -> Result.Result x b","comment":" Chain together a sequence of computations that may fail. It is helpful\nto see its definition:\n\n    andThen : Result e a -> (a -> Result e b) -> Result e b\n    andThen result callback =\n        case result of\n          Ok value -> callback value\n          Err msg -> Err msg\n\nThis means we only continue with the callback if things are going well. For\nexample, say you need to use (`toInt : String -> Result String Int`) to parse\na month and make sure it is between 1 and 12:\n\n    toValidMonth : Int -> Result String Int\n    toValidMonth month =\n        if month >= 1 && month <= 12\n            then Ok month\n            else Err \"months must be between 1 and 12\"\n\n    toMonth : String -> Result String Int\n    toMonth rawString =\n        toInt rawString `andThen` toValidMonth\n\n    -- toMonth \"4\" == Ok 4\n    -- toMonth \"9\" == Ok 9\n    -- toMonth \"a\" == Err \"cannot parse to an Int\"\n    -- toMonth \"0\" == Err \"months must be between 1 and 12\"\n\nThis allows us to come out of a chain of operations with quite a specific error\nmessage. It is often best to create a custom type that explicitly represents\nthe exact ways your computation may fail. This way it is easy to handle in your\ncode.\n"},{"name":"formatError","fullName":"Result.formatError","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Result#formatError","signature":"(error -> error') -> Result.Result error a -> Result.Result error' a","comment":" Format the error value of a result. If the result is `Ok`, it stays exactly\nthe same, but if the result is an `Err` we will format the error. For example,\nsay the errors we get have too much information:\n\n    parseInt : String -> Result ParseError Int\n\n    type ParseError =\n        { message : String\n        , code : Int\n        , position : (Int,Int)\n        }\n\n    formatError .message (parseInt \"123\") == Ok 123\n    formatError .message (parseInt \"abc\") == Err \"char 'a' is not a number\"\n"},{"name":"fromMaybe","fullName":"Result.fromMaybe","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Result#fromMaybe","signature":"x -> Maybe.Maybe a -> Result.Result x a","comment":" Convert from a simple `Maybe` to interact with some code that primarily\nuses `Results`.\n\n    parseInt : String -> Maybe Int\n\n    resultParseInt : String -> Result String Int\n    resultParseInt string =\n        fromMaybe (\"error parsing string: \" ++ toString string) (parseInt string)\n"},{"name":"map","fullName":"Result.map","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Result#map","signature":"(a -> value) -> Result.Result x a -> Result.Result x value","comment":" Apply a function to a result. If the result is `Ok`, it will be converted.\nIf the result is an `Err`, the same error value will propagate through.\n\n    map sqrt (Ok 4.0)          == Ok 2.0\n    map sqrt (Err \"bad input\") == Err \"bad input\"\n"},{"name":"map2","fullName":"Result.map2","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Result#map2","signature":"(a -> b -> value) -> Result.Result x a -> Result.Result x b -> Result.Result x value","comment":" Apply a function to two results, if both results are `Ok`. If not,\nthe first argument which is an `Err` will propagate through.\n\n    map2 (+) (String.toInt \"1\") (String.toInt \"2\") == Ok 3\n    map2 (+) (String.toInt \"1\") (String.toInt \"y\") == Err \"could not convert string 'y' to an Int\"\n    map2 (+) (String.toInt \"x\") (String.toInt \"y\") == Err \"could not convert string 'x' to an Int\"\n"},{"name":"map3","fullName":"Result.map3","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Result#map3","signature":"(a -> b -> c -> value) -> Result.Result x a -> Result.Result x b -> Result.Result x c -> Result.Result x value","comment":""},{"name":"map4","fullName":"Result.map4","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Result#map4","signature":"(a -> b -> c -> d -> value) -> Result.Result x a -> Result.Result x b -> Result.Result x c -> Result.Result x d -> Result.Result x value","comment":""},{"name":"map5","fullName":"Result.map5","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Result#map5","signature":"(a -> b -> c -> d -> e -> value) -> Result.Result x a -> Result.Result x b -> Result.Result x c -> Result.Result x d -> Result.Result x e -> Result.Result x value","comment":""},{"name":"toMaybe","fullName":"Result.toMaybe","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Result#toMaybe","signature":"Result.Result x a -> Maybe.Maybe a","comment":" Convert to a simpler `Maybe` if the actual error message is not needed or\nyou need to interact with some code that primarily uses maybes.\n\n    parseInt : String -> Result ParseError Int\n\n    maybeParseInt : String -> Maybe Int\n    maybeParseInt string =\n        toMaybe (parseInt string)\n"},{"name":"withDefault","fullName":"Result.withDefault","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Result#withDefault","signature":"a -> Result.Result x a -> a","comment":" If the result is `Ok` return the value, but if the result is an `Err` then\nreturn a given default value. The following examples try to parse integers.\n\n    Result.withDefault 0 (String.toInt \"123\") == 123\n    Result.withDefault 0 (String.toInt \"abc\") == 0\n"},{"name":"Ok","fullName":"Result.Ok","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Result#Result","signature":"","comment":""},{"name":"Ok","fullName":"Result.Ok","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Result#Result","signature":"","comment":""},{"name":"Err","fullName":"Result.Err","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Result#Result","signature":"","comment":""},{"name":"Err","fullName":"Result.Err","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Result#Result","signature":"","comment":""},{"name":"%","fullName":"Basics.%","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#%","signature":"Int -> Int -> Int","comment":" Perform [modular arithmetic](http://en.wikipedia.org/wiki/Modular_arithmetic).\n\n     7 % 2 == 1\n    -1 % 4 == 3\n"},{"name":"%","fullName":"Basics.%","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#%","signature":"Int -> Int -> Int","comment":" Perform [modular arithmetic](http://en.wikipedia.org/wiki/Modular_arithmetic).\n\n     7 % 2 == 1\n    -1 % 4 == 3\n"},{"name":"&&","fullName":"Basics.&&","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#&&","signature":"Bool -> Bool -> Bool","comment":" The logical AND operator. `True` if both inputs are `True`.\nThis operator short-circuits to `False` if the first argument is `False`.\n"},{"name":"&&","fullName":"Basics.&&","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#&&","signature":"Bool -> Bool -> Bool","comment":" The logical AND operator. `True` if both inputs are `True`.\nThis operator short-circuits to `False` if the first argument is `False`.\n"},{"name":"*","fullName":"Basics.*","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#*","signature":"number -> number -> number","comment":""},{"name":"*","fullName":"Basics.*","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#*","signature":"number -> number -> number","comment":""},{"name":"+","fullName":"Basics.+","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#+","signature":"number -> number -> number","comment":""},{"name":"+","fullName":"Basics.+","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#+","signature":"number -> number -> number","comment":""},{"name":"++","fullName":"Basics.++","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#++","signature":"appendable -> appendable -> appendable","comment":" Put two appendable things together. This includes strings, lists, and text.\n\n    \"hello\" ++ \"world\" == \"helloworld\"\n    [1,1,2] ++ [3,5,8] == [1,1,2,3,5,8]\n"},{"name":"++","fullName":"Basics.++","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#++","signature":"appendable -> appendable -> appendable","comment":" Put two appendable things together. This includes strings, lists, and text.\n\n    \"hello\" ++ \"world\" == \"helloworld\"\n    [1,1,2] ++ [3,5,8] == [1,1,2,3,5,8]\n"},{"name":"-","fullName":"Basics.-","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#-","signature":"number -> number -> number","comment":""},{"name":"-","fullName":"Basics.-","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#-","signature":"number -> number -> number","comment":""},{"name":"/","fullName":"Basics./","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#/","signature":"Float -> Float -> Float","comment":" Floating point division. "},{"name":"/","fullName":"Basics./","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#/","signature":"Float -> Float -> Float","comment":" Floating point division. "},{"name":"//","fullName":"Basics.//","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#//","signature":"Int -> Int -> Int","comment":" Integer division. The remainder is discarded. "},{"name":"//","fullName":"Basics.//","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#//","signature":"Int -> Int -> Int","comment":" Integer division. The remainder is discarded. "},{"name":"/=","fullName":"Basics./=","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#/=","signature":"a -> a -> Bool","comment":""},{"name":"/=","fullName":"Basics./=","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#/=","signature":"a -> a -> Bool","comment":""},{"name":"<","fullName":"Basics.<","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#<","signature":"comparable -> comparable -> Bool","comment":""},{"name":"<","fullName":"Basics.<","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#<","signature":"comparable -> comparable -> Bool","comment":""},{"name":"<<","fullName":"Basics.<<","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#<<","signature":"(b -> c) -> (a -> b) -> a -> c","comment":" Function composition, passing results along in the suggested direction. For\nexample, the following code checks if the square root of a number is odd:\n\n    not << isEven << sqrt\n\nYou can think of this operator as equivalent to the following:\n\n    (g << f)  ==  (\\x -> g (f x))\n\nSo our example expands out to something like this:\n\n    \\n -> not (isEven (sqrt n))\n"},{"name":"<<","fullName":"Basics.<<","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#<<","signature":"(b -> c) -> (a -> b) -> a -> c","comment":" Function composition, passing results along in the suggested direction. For\nexample, the following code checks if the square root of a number is odd:\n\n    not << isEven << sqrt\n\nYou can think of this operator as equivalent to the following:\n\n    (g << f)  ==  (\\x -> g (f x))\n\nSo our example expands out to something like this:\n\n    \\n -> not (isEven (sqrt n))\n"},{"name":"<=","fullName":"Basics.<=","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#<=","signature":"comparable -> comparable -> Bool","comment":""},{"name":"<=","fullName":"Basics.<=","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#<=","signature":"comparable -> comparable -> Bool","comment":""},{"name":"<|","fullName":"Basics.<|","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#<|","signature":"(a -> b) -> a -> b","comment":" Backward function application `f <| x == f x`. This function is useful for\navoiding parenthesis. Consider the following code to create a text element:\n\n    leftAligned (monospace (fromString \"code\"))\n\nThis can also be written as:\n\n    leftAligned << monospace <| fromString \"code\"\n"},{"name":"<|","fullName":"Basics.<|","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#<|","signature":"(a -> b) -> a -> b","comment":" Backward function application `f <| x == f x`. This function is useful for\navoiding parenthesis. Consider the following code to create a text element:\n\n    leftAligned (monospace (fromString \"code\"))\n\nThis can also be written as:\n\n    leftAligned << monospace <| fromString \"code\"\n"},{"name":"==","fullName":"Basics.==","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#==","signature":"a -> a -> Bool","comment":""},{"name":"==","fullName":"Basics.==","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#==","signature":"a -> a -> Bool","comment":""},{"name":">","fullName":"Basics.>","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#>","signature":"comparable -> comparable -> Bool","comment":""},{"name":">","fullName":"Basics.>","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#>","signature":"comparable -> comparable -> Bool","comment":""},{"name":">=","fullName":"Basics.>=","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#>=","signature":"comparable -> comparable -> Bool","comment":""},{"name":">=","fullName":"Basics.>=","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#>=","signature":"comparable -> comparable -> Bool","comment":""},{"name":">>","fullName":"Basics.>>","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#>>","signature":"(a -> b) -> (b -> c) -> a -> c","comment":" Function composition, passing results along in the suggested direction. For\nexample, the following code checks if the square root of a number is odd:\n\n    sqrt >> isEven >> not\n\nThis direction of function composition seems less pleasant than `(<<)` which\nreads nicely in expressions like: `filter (not << isRegistered) students`\n"},{"name":">>","fullName":"Basics.>>","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#>>","signature":"(a -> b) -> (b -> c) -> a -> c","comment":" Function composition, passing results along in the suggested direction. For\nexample, the following code checks if the square root of a number is odd:\n\n    sqrt >> isEven >> not\n\nThis direction of function composition seems less pleasant than `(<<)` which\nreads nicely in expressions like: `filter (not << isRegistered) students`\n"},{"name":"^","fullName":"Basics.^","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#^","signature":"number -> number -> number","comment":" Exponentiation\n\n    3^2 == 9\n"},{"name":"^","fullName":"Basics.^","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#^","signature":"number -> number -> number","comment":" Exponentiation\n\n    3^2 == 9\n"},{"name":"abs","fullName":"Basics.abs","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#abs","signature":"number -> number","comment":" Take the absolute value of a number. "},{"name":"abs","fullName":"Basics.abs","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#abs","signature":"number -> number","comment":" Take the absolute value of a number. "},{"name":"acos","fullName":"Basics.acos","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#acos","signature":"Float -> Float","comment":""},{"name":"acos","fullName":"Basics.acos","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#acos","signature":"Float -> Float","comment":""},{"name":"always","fullName":"Basics.always","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#always","signature":"a -> b -> a","comment":" Create a [constant function](http://en.wikipedia.org/wiki/Constant_function),\na function that *always* returns the same value regardless of what input you give.\nIt is defined as:\n\n    always a b = a\n\nIt totally ignores the second argument, so `always 42` is a function that always\nreturns 42. When you are dealing with higher-order functions, this comes in\nhandy more often than you might expect. For example, creating a zeroed out list\nof length ten would be:\n\n    map (always 0) [0..9]\n"},{"name":"always","fullName":"Basics.always","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#always","signature":"a -> b -> a","comment":" Create a [constant function](http://en.wikipedia.org/wiki/Constant_function),\na function that *always* returns the same value regardless of what input you give.\nIt is defined as:\n\n    always a b = a\n\nIt totally ignores the second argument, so `always 42` is a function that always\nreturns 42. When you are dealing with higher-order functions, this comes in\nhandy more often than you might expect. For example, creating a zeroed out list\nof length ten would be:\n\n    map (always 0) [0..9]\n"},{"name":"asin","fullName":"Basics.asin","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#asin","signature":"Float -> Float","comment":""},{"name":"asin","fullName":"Basics.asin","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#asin","signature":"Float -> Float","comment":""},{"name":"atan","fullName":"Basics.atan","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#atan","signature":"Float -> Float","comment":" You probably do not want to use this. It takes `(y/x)` as the\nargument, so there is no way to know whether the negative signs comes from\nthe `y` or `x`. Thus, the resulting angle is always between &pi;/2 and -&pi;/2\n(in quadrants I and IV). You probably want to use `atan2` instead.\n"},{"name":"atan","fullName":"Basics.atan","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#atan","signature":"Float -> Float","comment":" You probably do not want to use this. It takes `(y/x)` as the\nargument, so there is no way to know whether the negative signs comes from\nthe `y` or `x`. Thus, the resulting angle is always between &pi;/2 and -&pi;/2\n(in quadrants I and IV). You probably want to use `atan2` instead.\n"},{"name":"atan2","fullName":"Basics.atan2","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#atan2","signature":"Float -> Float -> Float","comment":" This helps you find the angle of a Cartesian coordinate.\nYou will almost certainly want to use this instead of `atan`.\nSo `atan2 y x` computes *atan(y/x)* but also keeps track of which\nquadrant the angle should really be in. The result will be between\n&pi; and -&pi;, giving you the full range of angles.\n"},{"name":"atan2","fullName":"Basics.atan2","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#atan2","signature":"Float -> Float -> Float","comment":" This helps you find the angle of a Cartesian coordinate.\nYou will almost certainly want to use this instead of `atan`.\nSo `atan2 y x` computes *atan(y/x)* but also keeps track of which\nquadrant the angle should really be in. The result will be between\n&pi; and -&pi;, giving you the full range of angles.\n"},{"name":"ceiling","fullName":"Basics.ceiling","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#ceiling","signature":"Float -> Int","comment":" Ceiling function, rounding up. "},{"name":"ceiling","fullName":"Basics.ceiling","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#ceiling","signature":"Float -> Int","comment":" Ceiling function, rounding up. "},{"name":"clamp","fullName":"Basics.clamp","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#clamp","signature":"number -> number -> number -> number","comment":" Clamps a number within a given range. With the expression\n`clamp 100 200 x` the results are as follows:\n\n    100     if x < 100\n     x      if 100 <= x < 200\n    200     if 200 <= x\n"},{"name":"clamp","fullName":"Basics.clamp","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#clamp","signature":"number -> number -> number -> number","comment":" Clamps a number within a given range. With the expression\n`clamp 100 200 x` the results are as follows:\n\n    100     if x < 100\n     x      if 100 <= x < 200\n    200     if 200 <= x\n"},{"name":"compare","fullName":"Basics.compare","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#compare","signature":"comparable -> comparable -> Basics.Order","comment":" Compare any two comparable values. Comparable values include `String`, `Char`,\n`Int`, `Float`, `Time`, or a list or tuple containing comparable values.\nThese are also the only values that work as `Dict` keys or `Set` members.\n"},{"name":"compare","fullName":"Basics.compare","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#compare","signature":"comparable -> comparable -> Basics.Order","comment":" Compare any two comparable values. Comparable values include `String`, `Char`,\n`Int`, `Float`, `Time`, or a list or tuple containing comparable values.\nThese are also the only values that work as `Dict` keys or `Set` members.\n"},{"name":"cos","fullName":"Basics.cos","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#cos","signature":"Float -> Float","comment":""},{"name":"cos","fullName":"Basics.cos","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#cos","signature":"Float -> Float","comment":""},{"name":"curry","fullName":"Basics.curry","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#curry","signature":"(( a, b ) -> c) -> a -> b -> c","comment":" Change how arguments are passed to a function.\nThis splits paired arguments into two separate arguments.\n"},{"name":"curry","fullName":"Basics.curry","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#curry","signature":"(( a, b ) -> c) -> a -> b -> c","comment":" Change how arguments are passed to a function.\nThis splits paired arguments into two separate arguments.\n"},{"name":"degrees","fullName":"Basics.degrees","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#degrees","signature":"Float -> Float","comment":" Convert degrees to standard Elm angles (radians). "},{"name":"degrees","fullName":"Basics.degrees","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#degrees","signature":"Float -> Float","comment":" Convert degrees to standard Elm angles (radians). "},{"name":"e","fullName":"Basics.e","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#e","signature":"Float","comment":" An approximation of e. "},{"name":"e","fullName":"Basics.e","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#e","signature":"Float","comment":" An approximation of e. "},{"name":"flip","fullName":"Basics.flip","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#flip","signature":"(a -> b -> c) -> b -> a -> c","comment":" Flip the order of the first two arguments to a function. "},{"name":"flip","fullName":"Basics.flip","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#flip","signature":"(a -> b -> c) -> b -> a -> c","comment":" Flip the order of the first two arguments to a function. "},{"name":"floor","fullName":"Basics.floor","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#floor","signature":"Float -> Int","comment":" Floor function, rounding down. "},{"name":"floor","fullName":"Basics.floor","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#floor","signature":"Float -> Int","comment":" Floor function, rounding down. "},{"name":"fromPolar","fullName":"Basics.fromPolar","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#fromPolar","signature":"( Float, Float ) -> ( Float, Float )","comment":" Convert polar coordinates (r,&theta;) to Cartesian coordinates (x,y). "},{"name":"fromPolar","fullName":"Basics.fromPolar","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#fromPolar","signature":"( Float, Float ) -> ( Float, Float )","comment":" Convert polar coordinates (r,&theta;) to Cartesian coordinates (x,y). "},{"name":"fst","fullName":"Basics.fst","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#fst","signature":"( a, b ) -> a","comment":" Given a 2-tuple, returns the first value. "},{"name":"fst","fullName":"Basics.fst","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#fst","signature":"( a, b ) -> a","comment":" Given a 2-tuple, returns the first value. "},{"name":"identity","fullName":"Basics.identity","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#identity","signature":"a -> a","comment":" Given a value, returns exactly the same value. This is called\n[the identity function](http://en.wikipedia.org/wiki/Identity_function).\n"},{"name":"identity","fullName":"Basics.identity","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#identity","signature":"a -> a","comment":" Given a value, returns exactly the same value. This is called\n[the identity function](http://en.wikipedia.org/wiki/Identity_function).\n"},{"name":"isInfinite","fullName":"Basics.isInfinite","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#isInfinite","signature":"Float -> Bool","comment":" Determine whether a float is positive or negative infinity.\n\n    isInfinite (0/0)     == False\n    isInfinite (sqrt -1) == False\n    isInfinite (1/0)     == True\n    isInfinite 1         == False\n\nNotice that NaN is not infinite! For float `n` to be finite implies that\n`not (isInfinite n || isNaN n)` evaluates to `True`.\n"},{"name":"isInfinite","fullName":"Basics.isInfinite","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#isInfinite","signature":"Float -> Bool","comment":" Determine whether a float is positive or negative infinity.\n\n    isInfinite (0/0)     == False\n    isInfinite (sqrt -1) == False\n    isInfinite (1/0)     == True\n    isInfinite 1         == False\n\nNotice that NaN is not infinite! For float `n` to be finite implies that\n`not (isInfinite n || isNaN n)` evaluates to `True`.\n"},{"name":"isNaN","fullName":"Basics.isNaN","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#isNaN","signature":"Float -> Bool","comment":" Determine whether a float is an undefined or unrepresentable number.\nNaN stands for *not a number* and it is [a standardized part of floating point\nnumbers](http://en.wikipedia.org/wiki/NaN).\n\n    isNaN (0/0)     == True\n    isNaN (sqrt -1) == True\n    isNaN (1/0)     == False  -- infinity is a number\n    isNaN 1         == False\n"},{"name":"isNaN","fullName":"Basics.isNaN","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#isNaN","signature":"Float -> Bool","comment":" Determine whether a float is an undefined or unrepresentable number.\nNaN stands for *not a number* and it is [a standardized part of floating point\nnumbers](http://en.wikipedia.org/wiki/NaN).\n\n    isNaN (0/0)     == True\n    isNaN (sqrt -1) == True\n    isNaN (1/0)     == False  -- infinity is a number\n    isNaN 1         == False\n"},{"name":"logBase","fullName":"Basics.logBase","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#logBase","signature":"Float -> Float -> Float","comment":" Calculate the logarithm of a number with a given base.\n\n    logBase 10 100 == 2\n    logBase 2 256 == 8\n"},{"name":"logBase","fullName":"Basics.logBase","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#logBase","signature":"Float -> Float -> Float","comment":" Calculate the logarithm of a number with a given base.\n\n    logBase 10 100 == 2\n    logBase 2 256 == 8\n"},{"name":"max","fullName":"Basics.max","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#max","signature":"comparable -> comparable -> comparable","comment":" Find the larger of two comparables. "},{"name":"max","fullName":"Basics.max","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#max","signature":"comparable -> comparable -> comparable","comment":" Find the larger of two comparables. "},{"name":"min","fullName":"Basics.min","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#min","signature":"comparable -> comparable -> comparable","comment":" Find the smaller of two comparables. "},{"name":"min","fullName":"Basics.min","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#min","signature":"comparable -> comparable -> comparable","comment":" Find the smaller of two comparables. "},{"name":"negate","fullName":"Basics.negate","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#negate","signature":"number -> number","comment":" Negate a number.\n\n    negate 42 == -42\n    negate -42 == 42\n    negate 0 == 0\n"},{"name":"negate","fullName":"Basics.negate","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#negate","signature":"number -> number","comment":" Negate a number.\n\n    negate 42 == -42\n    negate -42 == 42\n    negate 0 == 0\n"},{"name":"not","fullName":"Basics.not","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#not","signature":"Bool -> Bool","comment":" Negate a boolean value.\n\n    not True == False\n    not False == True\n"},{"name":"not","fullName":"Basics.not","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#not","signature":"Bool -> Bool","comment":" Negate a boolean value.\n\n    not True == False\n    not False == True\n"},{"name":"pi","fullName":"Basics.pi","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#pi","signature":"Float","comment":" An approximation of pi. "},{"name":"pi","fullName":"Basics.pi","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#pi","signature":"Float","comment":" An approximation of pi. "},{"name":"radians","fullName":"Basics.radians","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#radians","signature":"Float -> Float","comment":" Convert radians to standard Elm angles (radians). "},{"name":"radians","fullName":"Basics.radians","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#radians","signature":"Float -> Float","comment":" Convert radians to standard Elm angles (radians). "},{"name":"rem","fullName":"Basics.rem","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#rem","signature":"Int -> Int -> Int","comment":" Find the remainder after dividing one number by another.\n\n     7 `rem` 2 == 1\n    -1 `rem` 4 == -1\n"},{"name":"rem","fullName":"Basics.rem","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#rem","signature":"Int -> Int -> Int","comment":" Find the remainder after dividing one number by another.\n\n     7 `rem` 2 == 1\n    -1 `rem` 4 == -1\n"},{"name":"round","fullName":"Basics.round","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#round","signature":"Float -> Int","comment":" Round a number to the nearest integer. "},{"name":"round","fullName":"Basics.round","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#round","signature":"Float -> Int","comment":" Round a number to the nearest integer. "},{"name":"sin","fullName":"Basics.sin","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#sin","signature":"Float -> Float","comment":""},{"name":"sin","fullName":"Basics.sin","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#sin","signature":"Float -> Float","comment":""},{"name":"snd","fullName":"Basics.snd","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#snd","signature":"( a, b ) -> b","comment":" Given a 2-tuple, returns the second value. "},{"name":"snd","fullName":"Basics.snd","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#snd","signature":"( a, b ) -> b","comment":" Given a 2-tuple, returns the second value. "},{"name":"sqrt","fullName":"Basics.sqrt","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#sqrt","signature":"Float -> Float","comment":" Take the square root of a number. "},{"name":"sqrt","fullName":"Basics.sqrt","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#sqrt","signature":"Float -> Float","comment":" Take the square root of a number. "},{"name":"tan","fullName":"Basics.tan","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#tan","signature":"Float -> Float","comment":""},{"name":"tan","fullName":"Basics.tan","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#tan","signature":"Float -> Float","comment":""},{"name":"toFloat","fullName":"Basics.toFloat","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#toFloat","signature":"Int -> Float","comment":" Convert an integer into a float. "},{"name":"toFloat","fullName":"Basics.toFloat","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#toFloat","signature":"Int -> Float","comment":" Convert an integer into a float. "},{"name":"toPolar","fullName":"Basics.toPolar","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#toPolar","signature":"( Float, Float ) -> ( Float, Float )","comment":" Convert Cartesian coordinates (x,y) to polar coordinates (r,&theta;). "},{"name":"toPolar","fullName":"Basics.toPolar","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#toPolar","signature":"( Float, Float ) -> ( Float, Float )","comment":" Convert Cartesian coordinates (x,y) to polar coordinates (r,&theta;). "},{"name":"toString","fullName":"Basics.toString","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#toString","signature":"a -> String","comment":" Turn any kind of value into a string. When you view the resulting string\nwith `Text.fromString` it should look just like the value it came from.\n\n    toString 42 == \"42\"\n    toString [1,2] == \"[1,2]\"\n    toString \"he said, \\\"hi\\\"\" == \"\\\"he said, \\\\\\\"hi\\\\\\\"\\\"\"\n"},{"name":"toString","fullName":"Basics.toString","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#toString","signature":"a -> String","comment":" Turn any kind of value into a string. When you view the resulting string\nwith `Text.fromString` it should look just like the value it came from.\n\n    toString 42 == \"42\"\n    toString [1,2] == \"[1,2]\"\n    toString \"he said, \\\"hi\\\"\" == \"\\\"he said, \\\\\\\"hi\\\\\\\"\\\"\"\n"},{"name":"truncate","fullName":"Basics.truncate","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#truncate","signature":"Float -> Int","comment":" Truncate a number, rounding towards zero. "},{"name":"truncate","fullName":"Basics.truncate","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#truncate","signature":"Float -> Int","comment":" Truncate a number, rounding towards zero. "},{"name":"turns","fullName":"Basics.turns","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#turns","signature":"Float -> Float","comment":" Convert turns to standard Elm angles (radians).\nOne turn is equal to 360&deg;.\n"},{"name":"turns","fullName":"Basics.turns","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#turns","signature":"Float -> Float","comment":" Convert turns to standard Elm angles (radians).\nOne turn is equal to 360&deg;.\n"},{"name":"uncurry","fullName":"Basics.uncurry","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#uncurry","signature":"(a -> b -> c) -> ( a, b ) -> c","comment":" Change how arguments are passed to a function.\nThis combines two arguments into a single pair.\n"},{"name":"uncurry","fullName":"Basics.uncurry","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#uncurry","signature":"(a -> b -> c) -> ( a, b ) -> c","comment":" Change how arguments are passed to a function.\nThis combines two arguments into a single pair.\n"},{"name":"xor","fullName":"Basics.xor","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#xor","signature":"Bool -> Bool -> Bool","comment":" The exclusive-or operator. `True` if exactly one input is `True`. "},{"name":"xor","fullName":"Basics.xor","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#xor","signature":"Bool -> Bool -> Bool","comment":" The exclusive-or operator. `True` if exactly one input is `True`. "},{"name":"|>","fullName":"Basics.|>","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#|>","signature":"a -> (a -> b) -> b","comment":" Forward function application `x |> f == f x`. This function is useful\nfor avoiding parenthesis and writing code in a more natural way.\nConsider the following code to create a pentagon:\n\n    scale 2 (move (10,10) (filled blue (ngon 5 30)))\n\nThis can also be written as:\n\n    ngon 5 30\n      |> filled blue\n      |> move (10,10)\n      |> scale 2\n"},{"name":"|>","fullName":"Basics.|>","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#|>","signature":"a -> (a -> b) -> b","comment":" Forward function application `x |> f == f x`. This function is useful\nfor avoiding parenthesis and writing code in a more natural way.\nConsider the following code to create a pentagon:\n\n    scale 2 (move (10,10) (filled blue (ngon 5 30)))\n\nThis can also be written as:\n\n    ngon 5 30\n      |> filled blue\n      |> move (10,10)\n      |> scale 2\n"},{"name":"||","fullName":"Basics.||","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#||","signature":"Bool -> Bool -> Bool","comment":" The logical OR operator. `True` if one or both inputs are `True`.\nThis operator short-circuits to `True` if the first argument is `True`.\n"},{"name":"||","fullName":"Basics.||","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#||","signature":"Bool -> Bool -> Bool","comment":" The logical OR operator. `True` if one or both inputs are `True`.\nThis operator short-circuits to `True` if the first argument is `True`.\n"},{"name":"LT","fullName":"Basics.LT","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#Order","signature":"","comment":""},{"name":"LT","fullName":"Basics.LT","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#Order","signature":"","comment":""},{"name":"EQ","fullName":"Basics.EQ","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#Order","signature":"","comment":""},{"name":"EQ","fullName":"Basics.EQ","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#Order","signature":"","comment":""},{"name":"GT","fullName":"Basics.GT","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#Order","signature":"","comment":""},{"name":"GT","fullName":"Basics.GT","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#Order","signature":"","comment":""},{"name":"andThen","fullName":"Maybe.andThen","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Maybe#andThen","signature":"Maybe.Maybe a -> (a -> Maybe.Maybe b) -> Maybe.Maybe b","comment":" Chain together many computations that may fail. It is helpful to see its\ndefinition:\n\n    andThen : Maybe a -> (a -> Maybe b) -> Maybe b\n    andThen maybe callback =\n        case maybe of\n            Just value ->\n                callback value\n\n            Nothing ->\n                Nothing\n\nThis means we only continue with the callback if things are going well. For\nexample, say you need to use (`head : List Int -> Maybe Int`) to get the\nfirst month from a `List` and then make sure it is between 1 and 12:\n\n    toValidMonth : Int -> Maybe Int\n    toValidMonth month =\n        if month >= 1 && month <= 12 then\n            Just month\n        else\n            Nothing\n\n    getFirstMonth : List Int -> Maybe Int\n    getFirstMonth months =\n        head months `andThen` toValidMonth\n\nIf `head` fails and results in `Nothing` (because the `List` was empty`),\nthis entire chain of operations will short-circuit and result in `Nothing`.\nIf `toValidMonth` results in `Nothing`, again the chain of computations\nwill result in `Nothing`.\n"},{"name":"map","fullName":"Maybe.map","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Maybe#map","signature":"(a -> b) -> Maybe.Maybe a -> Maybe.Maybe b","comment":" Transform a `Maybe` value with a given function:\n\n    map sqrt (Just 9) == Just 3\n    map sqrt Nothing == Nothing\n"},{"name":"map2","fullName":"Maybe.map2","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Maybe#map2","signature":"(a -> b -> value) -> Maybe.Maybe a -> Maybe.Maybe b -> Maybe.Maybe value","comment":" Apply a function if all the arguments are `Just` a value.\n\n    map2 (+) (Just 3) (Just 4) == Just 7\n    map2 (+) (Just 3) Nothing == Nothing\n    map2 (+) Nothing (Just 4) == Nothing\n"},{"name":"map3","fullName":"Maybe.map3","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Maybe#map3","signature":"(a -> b -> c -> value) -> Maybe.Maybe a -> Maybe.Maybe b -> Maybe.Maybe c -> Maybe.Maybe value","comment":""},{"name":"map4","fullName":"Maybe.map4","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Maybe#map4","signature":"(a -> b -> c -> d -> value) -> Maybe.Maybe a -> Maybe.Maybe b -> Maybe.Maybe c -> Maybe.Maybe d -> Maybe.Maybe value","comment":""},{"name":"map5","fullName":"Maybe.map5","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Maybe#map5","signature":"(a -> b -> c -> d -> e -> value) -> Maybe.Maybe a -> Maybe.Maybe b -> Maybe.Maybe c -> Maybe.Maybe d -> Maybe.Maybe e -> Maybe.Maybe value","comment":""},{"name":"oneOf","fullName":"Maybe.oneOf","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Maybe#oneOf","signature":"List (Maybe.Maybe a) -> Maybe.Maybe a","comment":" Pick the first `Maybe` that actually has a value. Useful when you want to\ntry a couple different things, but there is no default value.\n\n    oneOf [ Nothing, Just 42, Just 71 ] == Just 42\n    oneOf [ Nothing, Nothing, Just 71 ] == Just 71\n    oneOf [ Nothing, Nothing, Nothing ] == Nothing\n"},{"name":"withDefault","fullName":"Maybe.withDefault","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Maybe#withDefault","signature":"a -> Maybe.Maybe a -> a","comment":" Provide a default value, turning an optional value into a normal\nvalue.  This comes in handy when paired with functions like\n[`Dict.get`](Dict#get) which gives back a `Maybe`.\n\n    withDefault 100 (Just 42)   -- 42\n    withDefault 100 Nothing     -- 100\n\n    withDefault \"unknown\" (Dict.get \"Tom\" Dict.empty)   -- \"unknown\"\n\n"},{"name":"Just","fullName":"Maybe.Just","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Maybe#Maybe","signature":"","comment":""},{"name":"Just","fullName":"Maybe.Just","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Maybe#Maybe","signature":"","comment":""},{"name":"Nothing","fullName":"Maybe.Nothing","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Maybe#Maybe","signature":"","comment":""},{"name":"Nothing","fullName":"Maybe.Nothing","href":"http://package.elm-lang.org/packages/elm-lang/core/latest/Maybe#Maybe","signature":"","comment":""}]
SandiCat commented 8 years ago

I've just installed the beta and it works great, auto-complete and all! I don't use elm-format so I couldn't speak about that. Thank you very much for the good work. If I run into any problems, I will make sure to post here. If you or Richard have any questions about my set-up that could help resolve his issues, feel free to ask.

There is one small bug with the status bar docs. It doesn't take into account the symbol qualifier (don't know if this is the correct term). For example, if there is a function called List.map, and I have something (a record field or an assignment in the let statement) called "map", the signature of List.map will display even when I click on just map, though it has nothing to do with List.map.

Also, a quick question. The lighttable Elm plugin has an amazing future where you can get the documentation for any symbol with a simple keystroke, embedded right in the editor. Here is a screenshot: screenshot from 2016-01-09 16-41-42 Are there any plans of implementing this in your plugin? I do realize this is no small task.

deadfoxygrandpa commented 8 years ago

@SandiDusic I know what you mean about the map being List.map thing. I'm not sure how to resolve that for now, because as far as I know, nobody has built a tool that can provide the type of arbitrary expressions at certain points in the source file. The elm compiler doesn't do it either.

Also, I would really like to do something like that screenshot you provided, but I don't know a good way to display it. Sublime Text doesn't have a tooltips or arbitrary popup boxes, really, so I could either put it in something like the build panel maybe, or the quick panel? You might not know this, but I was experimenting with something like this in the beta version you're using right now. If you click on a module name (like the word Collage in that screenshot) then either type "Explore Package Docs" in the command palette or right click and select Elm Language Support -> Explore This Package then it will bring up the package docs in the quick panel. Selecting one of the items from there will bring you to the docs in your web browser.

Do you think the build panel area would be OK for showing this type of stuff?

deadfoxygrandpa commented 8 years ago

@SandiDusic I just pushed a new beta version that adds a type panel. Right click -> Elm Language Support -> Open Type Panel or Elm Language Support: Open type panel in the command palette. Is this the type of thing you were asking about?

deadfoxygrandpa commented 8 years ago

2016-01-10 02_17_54-c__users_alex_documents_github_portfolio_src_header elm portfolio - sublime

deadfoxygrandpa commented 8 years ago

@rtfeldman I've created two new issues for the problems you've described here. I'll track them on these new issues instead of in this thread.

rtfeldman commented 8 years ago

Cool, thanks!

On Sat, Jan 9, 2016, 10:34 AM Alex Neslusan notifications@github.com wrote:

@rtfeldman https://github.com/rtfeldman I've created two new issues for the problems you've described here. I'll track them on these new issues instead of in this thread.

— Reply to this email directly or view it on GitHub https://github.com/deadfoxygrandpa/Elm.tmLanguage/issues/61#issuecomment-170268094 .

SandiCat commented 8 years ago

@deadfoxygrandpa That is amazing! Perhaps adding a keyboard shortcut and syntax highlighting (I assume this is possible since the build panel has it) would make it even better, but even as such it is enough. Using the build panel for it is really good since a simple Esc hides it.

I know what you mean about the map being List.map thing. I'm not sure how to resolve that for now, because as far as I know, nobody has built a tool that can provide the type of arbitrary expressions at certain points in the source file. The elm compiler doesn't do it either.

Hmm, I think we misunderstood each other. Here is some code:

import List

a = List.map (\x -> x^2) [1..10]
map = 10

In this example, when I put my cursor on any of the map, I'm getting the signature of Signal.map! For unqualified names like just map it might be impossible to get the definition, but for List.map maybe it should somehow pass the List. to elm-oracle, not just map. Sorry, obviously I don't know anything about your code so I might be totally off, and this truly might be impossible for all I know.

In fact, I've just noticed the documentation lookup does this too.

deadfoxygrandpa commented 8 years ago

@SandiDusic what keyboard shortcut would you want to use as default?

Also, I understand you. I had already created issue #71 to track this one, and I think I can fix it.

SandiCat commented 8 years ago

@SandiDusic what keyboard shortcut would you want to use as default?

Well, my opinion is irrelevant. I'm good with anything, it existing is enough.

Also, I understand you. I had already created issue #71 to track this one, and I think I can fix it.

Great!

deadfoxygrandpa commented 8 years ago

@SandiDusic I added syntax highlighting to the type panel just now, you should see it if you update.

SandiCat commented 8 years ago

@deadfoxygrandpa screenshot from 2016-01-13 18-49-04

Thanks again! I don't know if these could even be considered bugs, really they are irrelevant, but as far as beta-testing goes perhaps they are worth a mention: in the picture you can see import isn't being highlighted, which is weird, and backticks are shown even though they are markup, but this could be intentional.

deadfoxygrandpa commented 8 years ago

@SandiDusic Try it now. I just spent a while tweaking the highlighting in the type panel, and also you can now open the type panel with the alt+up keybind, and close it with alt+down. It's tricky to find open key combinations that aren't already used by other default behavior in the main program, but these don't seem to be.

deadfoxygrandpa commented 8 years ago

Also, I'm hopefully getting ready to release all this stuff in the next public version soon. The two issues reported by @rtfeldman seem like they might be fixed, or at least improved, so if there's anything else let me know!