Grammar update

This commit is contained in:
Arfon Smith
2016-08-24 09:30:20 -07:00
parent 216d63f575
commit 06e80f3889
103 changed files with 2675 additions and 47 deletions

View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>beforeRunningCommand</key>
<string>nop</string>
<key>command</key>
<string>#!/bin/bash
NAME="$(cat)"
if [[ -z "$NAME" ]]; then
NAME="\$1"
fi
echo "\`$NAME\`\$0"
</string>
<key>fallbackInput</key>
<string>word</string>
<key>input</key>
<string>selection</string>
<key>keyEquivalent</key>
<string>^'</string>
<key>name</key>
<string>Infix Function Call From Word / Selection</string>
<key>output</key>
<string>insertAsSnippet</string>
<key>scope</key>
<string>source.haskell</string>
<key>uuid</key>
<string>FA4AA254-EB7D-4B43-AC67-066AA9E8E8D9</string>
</dict>
</plist>

View File

@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>beforeRunningCommand</key>
<string>nop</string>
<key>command</key>
<string>#!/bin/bash
THASKELL=${TM_HASKELL:-ghci}
esc () {
STR="$1" ruby18 &lt;&lt;"RUBY"
str = ENV['STR']
str = str.gsub(/'/, "'\\\\''")
str = str.gsub(/[\\"]/, '\\\\\\0')
print "'#{str}'"
RUBY
}
osascript &lt;&lt;- APPLESCRIPT
tell app "Terminal"
launch
activate
do script "clear; cd $(esc "${TM_DIRECTORY}"); ${THASKELL} $(esc "${TM_FILEPATH}")"
set position of first window to {100, 100}
end tell
APPLESCRIPT
</string>
<key>input</key>
<string>none</string>
<key>inputFormat</key>
<string>text</string>
<key>keyEquivalent</key>
<string>@R</string>
<key>name</key>
<string>Load in GHCi</string>
<key>outputCaret</key>
<string>afterOutput</string>
<key>outputFormat</key>
<string>text</string>
<key>outputLocation</key>
<string>toolTip</string>
<key>scope</key>
<string>source.haskell</string>
<key>semanticClass</key>
<string>process.external.run.haskell</string>
<key>uuid</key>
<string>2242C46C-153E-4EEB-B80B-A5398559D759</string>
<key>version</key>
<integer>2</integer>
</dict>
</plist>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>beforeRunningCommand</key>
<string>nop</string>
<key>command</key>
<string>#!/bin/bash
echo "&lt;meta http-equiv=\"refresh\" content=\"0; http://haskell.org/hoogle/?q=$(cat)\"&gt;"</string>
<key>fallbackInput</key>
<string>word</string>
<key>input</key>
<string>selection</string>
<key>keyEquivalent</key>
<string>^H</string>
<key>name</key>
<string>Lookup on Hoogle</string>
<key>output</key>
<string>showAsHTML</string>
<key>scope</key>
<string>source.haskell</string>
<key>uuid</key>
<string>50D814AE-D850-4C97-AF3E-1FDE4366C6A3</string>
</dict>
</plist>

View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>beforeRunningCommand</key>
<string>nop</string>
<key>command</key>
<string>#!/bin/bash
NAME=${TM_FILENAME%.hs}
if [[ -z "$NAME" ]]; then
NAME="Main"
fi
cat &lt;&lt;SNIPPET
module \${1:$NAME} \${2/.+/(
/m}\${2:function}\${2/.+/
) /m}where
\$0
SNIPPET</string>
<key>input</key>
<string>none</string>
<key>name</key>
<string>module …</string>
<key>output</key>
<string>insertAsSnippet</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>mod</string>
<key>uuid</key>
<string>156D0588-A61A-4419-9C71-6E47320A4DA5</string>
</dict>
</plist>

View File

@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>beforeRunningCommand</key>
<string>saveModifiedFiles</string>
<key>command</key>
<string>#!/usr/bin/env ruby18 -wKU
require "#{ENV["TM_SUPPORT_PATH"]}/lib/tm/save_current_document"
require "#{ENV["TM_SUPPORT_PATH"]}/lib/tm/executor"
require "#{ENV["TM_SUPPORT_PATH"]}/lib/escape"
TextMate.save_if_untitled('hs')
haskell = e_sh(ENV['TM_HASKELL'] || 'runhaskell')
TextMate::Executor.run(haskell, ENV['TM_FILEPATH'])
</string>
<key>input</key>
<string>document</string>
<key>inputFormat</key>
<string>text</string>
<key>keyEquivalent</key>
<string>@r</string>
<key>name</key>
<string>Run</string>
<key>outputCaret</key>
<string>afterOutput</string>
<key>outputFormat</key>
<string>html</string>
<key>outputLocation</key>
<string>newWindow</string>
<key>requiredCommands</key>
<array>
<dict>
<key>command</key>
<string>runhaskell</string>
<key>locations</key>
<array>
<string>/opt/local/bin/runhugs</string>
<string>/usr/local/bin/runhaskell</string>
</array>
<key>variable</key>
<string>TM_HASKELL</string>
</dict>
</array>
<key>scope</key>
<string>source.haskell</string>
<key>semanticClass</key>
<string>process.run.script.haskell</string>
<key>uuid</key>
<string>3B083BE7-9812-4F06-A758-CCAD9514E797</string>
<key>version</key>
<integer>2</integer>
</dict>
</plist>

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>beforeRunningCommand</key>
<string>nop</string>
<key>command</key>
<string>haskelltype "$(cat)"</string>
<key>fallbackInput</key>
<string>word</string>
<key>input</key>
<string>selection</string>
<key>keyEquivalent</key>
<string>^h</string>
<key>name</key>
<string>Show Type</string>
<key>output</key>
<string>showAsTooltip</string>
<key>scope</key>
<string>source.haskell</string>
<key>uuid</key>
<string>6B723007-D4EE-476B-8282-76230C559D5A</string>
</dict>
</plist>

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Comments</string>
<key>scope</key>
<string>source.haskell</string>
<key>settings</key>
<dict>
<key>shellVariables</key>
<array>
<dict>
<key>name</key>
<string>TM_COMMENT_START_2</string>
<key>value</key>
<string>{-</string>
</dict>
<dict>
<key>name</key>
<string>TM_COMMENT_END_2</string>
<key>value</key>
<string>-}</string>
</dict>
<dict>
<key>name</key>
<string>TM_COMMENT_START</string>
<key>value</key>
<string>-- </string>
</dict>
</array>
</dict>
<key>uuid</key>
<string>E3994307-4D9E-44D6-832E-52C244F1CDF3</string>
</dict>
</plist>

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Indentation</string>
<key>scope</key>
<string>source.haskell</string>
<key>settings</key>
<dict>
<key>decreaseIndentPattern</key>
<string>^\s*$</string>
<key>disableIndentCorrections</key>
<true/>
<key>increaseIndentPattern</key>
<string>((^.*(=|\bdo|\bwhere|\bthen|\belse|\bof)\s*$)|(^.*\bif(?!.*\bthen\b.*\belse\b.*).*$))</string>
<key>indentOnPaste</key>
<string>simple</string>
</dict>
<key>uuid</key>
<string>39417FB9-B85C-4213-BB1D-C19BCDD4E487</string>
</dict>
</plist>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Symbol List</string>
<key>scope</key>
<string>source.haskell entity.name.function.infix</string>
<key>settings</key>
<dict>
<key>showInSymbolList</key>
<string>0</string>
</dict>
<key>uuid</key>
<string>0C39B945-E2C0-4E43-8A5B-332F6FA73C67</string>
</dict>
</plist>

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Typing Pairs</string>
<key>scope</key>
<string>source.haskell - comment</string>
<key>settings</key>
<dict>
<key>smartTypingPairs</key>
<array>
<array>
<string>"</string>
<string>"</string>
</array>
<array>
<string>{</string>
<string>}</string>
</array>
<array>
<string>[</string>
<string>]</string>
</array>
<array>
<string>(</string>
<string>)</string>
</array>
<array>
<string>`</string>
<string>`</string>
</array>
</array>
</dict>
<key>uuid</key>
<string>FBF9D932-D5CE-4EC4-9162-122E511C8627</string>
</dict>
</plist>

View File

@@ -0,0 +1,20 @@
# Installation
You can install this bundle in TextMate by opening the preferences and going to the bundles tab. After installation it will be automatically updated for you.
# General
* [Bundle Styleguide](http://kb.textmate.org/bundle_styleguide) — _before you make changes_
* [Commit Styleguide](http://kb.textmate.org/commit_styleguide) — _before you send a pull request_
* [Writing Bug Reports](http://kb.textmate.org/writing_bug_reports) — _before you report an issue_
# License
If not otherwise specified (see below), files in this repository fall under the following license:
Permission to copy, use, modify, sell and distribute this
software is granted. This software is provided "as is" without
express or implied warranty, and with no claim as to its
suitability for any purpose.
An exception is made for files in readable text which contain their own license information, or files where an accompanying file exists (in the same directory) with a “-license” suffix added to the base-name name of the original file, and an extension of txt, html, or similar. For example “tidy” is accompanied by “tidy-license.txt”.

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>${1:name} ${2:pattern}${2/.+/ /}= ${0:definition}</string>
<key>name</key>
<string>Definition</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>=</string>
<key>uuid</key>
<string>81886A7D-5EE8-438C-9FC8-6BA3B65E444A</string>
</dict>
</plist>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>${1:name} :: ${2:Type}
${1} ${3:pattern}${3/.+/ /}${4/.+/= /}${4:definition}</string>
<key>name</key>
<string>Function</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>fun</string>
<key>uuid</key>
<string>A83076A6-EC6F-418F-B8F9-9AE952964242</string>
</dict>
</plist>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>| ${1:predicate} = ${0:definition}</string>
<key>name</key>
<string>Guard</string>
<key>scope</key>
<string>source.haskell - comment</string>
<key>tabTrigger</key>
<string>|</string>
<key>uuid</key>
<string>BA1329DB-9437-4246-839A-48A49B48D31D</string>
</dict>
</plist>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>| ${0:documentation}</string>
<key>name</key>
<string>Haddock Postfix</string>
<key>scope</key>
<string>source.haskell comment.block</string>
<key>tabTrigger</key>
<string>|</string>
<key>uuid</key>
<string>961E79B9-CC31-4843-BBE9-51F46598BC25</string>
</dict>
</plist>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>^ ${0:documentation}</string>
<key>name</key>
<string>Haddock Prefix</string>
<key>scope</key>
<string>source.haskell comment.block</string>
<key>tabTrigger</key>
<string>^</string>
<key>uuid</key>
<string>E0E613C1-0760-46BC-A51E-168E658904C5</string>
</dict>
</plist>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>#!/usr/bin/env ${1:runhaskell}
</string>
<key>name</key>
<string>#!/usr/bin/env…</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>#!</string>
<key>uuid</key>
<string>54495635-CC26-4C14-A202-5C0CA4B078C2</string>
</dict>
</plist>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>\\${1:pattern} -&gt; ${0:expression}</string>
<key>name</key>
<string>Lambda Expression</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>\</string>
<key>uuid</key>
<string>0672CE3D-A796-44B1-AEF2-975C0FB27184</string>
</dict>
</plist>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>${1:name} &lt;- ${0:expression}</string>
<key>keyEquivalent</key>
<string>^,</string>
<key>name</key>
<string>Left Arrow</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>&lt;</string>
<key>uuid</key>
<string>9EF1F854-442C-40B2-BED5-454A015AA26D</string>
</dict>
</plist>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>[ ${1:expression} | ${2:name} &lt;- ${3:expression}${4/.+/, /}${4:condition} </string>
<key>name</key>
<string>List Comprehension</string>
<key>scope</key>
<string>source.haskell constant.language.nil</string>
<key>tabTrigger</key>
<string>[</string>
<key>uuid</key>
<string>C721BD84-71FA-423F-8460-2CED4954137F</string>
</dict>
</plist>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>module Main where
main :: IO ()
main = ${0:putStrLn "Hello World"}
</string>
<key>name</key>
<string>Main</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>main</string>
<key>uuid</key>
<string>A3A65891-D126-4D2D-9E6B-E20ADE2EAA88</string>
</dict>
</plist>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>${1:expression} -&gt; ${0:expression}</string>
<key>keyEquivalent</key>
<string>^.</string>
<key>name</key>
<string>Right Arrow</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>&gt;</string>
<key>uuid</key>
<string>BAF52ED4-6A5B-4260-B5BC-93D2012200C8</string>
</dict>
</plist>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>(${1:Class}) =&gt; $0</string>
<key>name</key>
<string>Type Constraint</string>
<key>scope</key>
<string>source.haskell meta.function.type</string>
<key>tabTrigger</key>
<string>=</string>
<key>uuid</key>
<string>1D72833B-ED9F-4A5E-9B72-F77E4FD09CE9</string>
</dict>
</plist>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>${1:Type} -&gt; ${0:Type}</string>
<key>name</key>
<string>Type Sequence</string>
<key>scope</key>
<string>source.haskell meta.function.type</string>
<key>tabTrigger</key>
<string>-</string>
<key>uuid</key>
<string>17FC3207-9DC4-47F8-A9B3-B38FE5F84158</string>
</dict>
</plist>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>${1:name} :: ${0:Type}</string>
<key>name</key>
<string>Type Signature</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>::</string>
<key>uuid</key>
<string>78719987-0091-407A-B5F1-68456A67130D</string>
</dict>
</plist>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>case ${1:expression} of
${2:pattern} -&gt; ${3:expression}
${4:otherwise} -&gt; ${5:expression}</string>
<key>name</key>
<string>case … of …</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>case</string>
<key>uuid</key>
<string>DD1D7C05-BC60-4E62-BC8C-9230A32C2533</string>
</dict>
</plist>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>class ${1:Class} where
${0:definition}</string>
<key>name</key>
<string>class …</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>cla</string>
<key>uuid</key>
<string>23F6173A-6390-46FF-865C-F59AB70E360A</string>
</dict>
</plist>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>data ${1:Type} = ${0:Other}</string>
<key>name</key>
<string>data …</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>dat</string>
<key>uuid</key>
<string>4C5EC5BB-6AE1-4825-AB50-1CF4741285E9</string>
</dict>
</plist>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>deriving (${0:Class})</string>
<key>name</key>
<string>deriving …</string>
<key>scope</key>
<string>source.haskell meta.type</string>
<key>tabTrigger</key>
<string>der</string>
<key>uuid</key>
<string>3FA57615-871F-4465-B35D-781B2EA9F5FC</string>
</dict>
</plist>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>do
${1:return ${0:expression}}</string>
<key>name</key>
<string>do …</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>do</string>
<key>uuid</key>
<string>397D02C1-A10B-4A83-8C05-6EB71E50D4CF</string>
</dict>
</plist>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>if ${1:condition}
then ${2:expression}
else ${3:expression}</string>
<key>name</key>
<string>if … then … else …</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>if</string>
<key>uuid</key>
<string>5F2050D1-1347-40CE-854E-24B2BF389849</string>
</dict>
</plist>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>import ${1:Module}${2/.+/ hiding (/}${2:function}${2/.+/)/}$0</string>
<key>name</key>
<string>import … hiding …</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>imph</string>
<key>uuid</key>
<string>1BA6898C-E8C4-44C9-98F4-4823608FEFD1</string>
</dict>
</plist>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>import ${1:Module}${2/.+/ (/}${2:function}${2/.+/)/}$0</string>
<key>name</key>
<string>import …</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>imp</string>
<key>uuid</key>
<string>85150C9B-A5F1-450A-BEBF-119091146957</string>
</dict>
</plist>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>import qualified ${1:Module}${2/.+/ as /}${2:Mod}${3/.+/ (/}${3:function}${3/.+/)/}$0</string>
<key>name</key>
<string>import qualified …</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>impq</string>
<key>uuid</key>
<string>32BC2D63-AF02-4DBA-8A75-6A74E334FE0C</string>
</dict>
</plist>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>instance ${1:Class} ${2:Type} where
${0:definition}</string>
<key>name</key>
<string>instance …</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>ins</string>
<key>uuid</key>
<string>26F8FAFE-4438-4D3C-A453-AAB72FD0F719</string>
</dict>
</plist>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>let
${1:name} = ${2:expression}
in ${0:expression}</string>
<key>name</key>
<string>let …</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>let</string>
<key>uuid</key>
<string>88C8A6FB-B06D-4386-BA33-51E28F64AD88</string>
</dict>
</plist>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>newtype ${1:Type} = ${0:Other}</string>
<key>name</key>
<string>newtype …</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>new</string>
<key>uuid</key>
<string>EFCBAB59-D574-454D-A05A-8928CF81947F</string>
</dict>
</plist>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>type ${1:Type} = ${0:Other}</string>
<key>name</key>
<string>type …</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>typ</string>
<key>uuid</key>
<string>3C25C0C7-D764-4BF8-9BFF-AE6954AF106D</string>
</dict>
</plist>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>content</key>
<string>where
${0:definitions}</string>
<key>name</key>
<string>where …</string>
<key>scope</key>
<string>source.haskell</string>
<key>tabTrigger</key>
<string>where</string>
<key>uuid</key>
<string>A6FD9AB4-8E7E-47A8-B17D-D82F47A0C495</string>
</dict>
</plist>

View File

@@ -0,0 +1,222 @@
#!/usr/bin/env ruby18 -w
word = ARGV.first
prelude = '
(!!) :: [a] -> Int -> a ||||| [0,1,2] !! 1 = 1
($) :: (a -> b) -> a -> b ||||| f x $ g y = f x (g y)
($!) :: (a -> b) -> (a -> b) |||||
(&&) :: Bool -> Bool -> Bool ||||| Boolean \'and\'
(||) :: Bool -> Bool -> Bool ||||| Boolean \'or\'
(*) :: Num a => a -> a -> a ||||| Multiplication
(**) :: Floating a => a -> a -> a ||||| Exponentiation
(+) :: Num a => a -> a -> a ||||| Addition
(++) :: [a] -> [a] -> [a] ||||| Concatonation: "abc" ++ "def" = "abcdef"
(-) :: Num a => a -> a -> a ||||| Subtraction
(.) :: (b -> c) -> (a -> b) -> a -> c ||||| Function composition
(/) :: Fractional a => a -> a -> a ||||| Division
(/=) :: Eq a => a -> a -> Bool ||||| not equal
(<) :: Ord a => a -> a -> Bool ||||| Less Than
(<=) :: Ord a => a -> a -> Bool ||||| Less Than or Equal To
(==) :: Eq a => a -> a -> Bool ||||| Equality
(=<<) :: Monad a => (a -> m b) -> m a -> m b ||||| Monadic binding
(>) :: Ord a => a -> a -> Bool ||||| Greater Than
(>=) :: Ord a => a -> a -> Bool ||||| Greater Than or Equal To
(>>) :: Monad m => m a -> m b -> m b ||||| Monadic binding
(>>=) :: Monad m => m a -> (a -> m b) -> m b ||||| Monadic binding
(^) :: (Num a, Integral b) => a -> b -> a ||||| Exponentiation
(^^) :: (Fractional a, Integral b) => a -> b -> a ||||| negative exponent allowed
abs :: Num a => a -> a ||||| Absolute Value
acos :: Floating a => a -> a ||||| Arccosine
acosh :: Floating a => a -> a ||||| Hyperbolic Arccosine
all :: (a -> Bool) -> [a] -> Bool ||||| all (/= \'a\') "cba" = False
and :: [Bool] -> Bool ||||| and [True, True, True] = True
any :: (a -> Bool) -> [a] -> Bool ||||| any (== \'c\') "abc" = True
appendFile :: FilePath -> String -> IO () ||||| Appends String to FilePath
applyM :: Monad m => (a -> m b) -> m a -> m b |||||
asTypeOf :: a -> a -> a ||||| Sort of a type cast
asin :: Floating a => a -> a ||||| Arcsine
asinh :: Floating a => a -> a ||||| Hyperbolic Arcsine
atan :: Floating a => a -> a ||||| Arctangent
atan2 :: RealFrac a => a -> a ||||| ArcTangent
atanh :: Floating a => a -> a ||||| Hyperbolic Arctangent
break :: (a -> Bool) -> [a] -> ([a], [a]) ||||| break (<2) [1,2,3] = ([1],[2,3])
catch :: IO a -> (IOError -> IO a) -> IO a |||||
ceiling :: (RealFrac a, Integral b) => a -> b |||||
compare :: Ord a => a -> a -> Ordering |||||
concat :: MonadPlus m => [m a] -> m a ||||| concat ["a","bc","d"] = "abcd"
concatMap :: (a -> [b]) -> [a] -> [b] |||||
const :: a -> b -> a |||||
cos :: Floating a => a -> a |||||
cosh :: Floating a => a -> a |||||
curry :: ((a, b) -> c) -> a -> b -> c |||||
cycle :: [a] -> [a] ||||| cycle "abc" = "abcabcabc...
decodeFloat :: RealFloat a => a -> (Integer, Int) |||||
div :: Integral a => a -> a -> a |||||
divMod :: Integral a => a -> a -> (a, a) |||||
drop :: Int -> [a] -> [a] ||||| drop 2 "abcd" = "cd"
dropWhile :: (a -> Bool) -> [a] -> [a] ||||| dropWhile (>3) [5,3,5] = [3,5]
elem :: Eq a => a -> [a] -> Bool ||||| \'a\' \'elem\' "abc" = True
encodeFloat :: RealFloat a => Integer -> Int -> a |||||
enumFrom :: Enum a => a -> [a] ||||| [n..]
enumFromThen :: Enum a => a -> a -> [a] ||||| [m,n..]
enumFromThenTo :: Enum a => a -> a -> a -> [a] ||||| [m,n..o]
enumFromTo :: Enum a => a -> a -> [a] ||||| [m..n]
error :: String -> a |||||
even :: Integral a => a -> Bool |||||
exp :: Floating a => a -> a |||||
exponent :: RealFloat a => a -> Int |||||
fail :: Monad m => String -> m a |||||
filter :: (a -> Bool) -> [a] -> [a] |||||
flip :: (a -> b -> c) -> (b -> a -> c) |||||
floatDigits :: RealFloat a => a -> Int |||||
floatRadix :: RealFloat a => a -> Integer |||||
floatRange :: RealFloat a => a -> (Int, Int) |||||
floor :: (RealFrac a, Integral b) => a -> b |||||
fmap :: Functor f => (a -> b) -> f a -> f b |||||
foldl :: (a -> b -> a) -> a -> [b] -> a ||||| foldl (+) 0 [a,b,c] = ((0+a)+b)+c
foldl1 :: (a -> a -> a) -> [a] -> a ||||| foldl1 (+) [a,b,c] = (a+b)+c
foldr :: (a -> b -> b) -> b -> [a] -> b ||||| foldr (+) 0 [a,b,c] = a+(b+(c+0))
foldr1 :: (a -> a -> a) -> [a] -> a ||||| foldr1 (+) [a,b,c] = a+(b+c)
fromEnum :: Enum a => a -> Int |||||
fromInteger :: Num a => Integer -> a |||||
fromIntegral :: (Integral a, Num b) => a -> b |||||
fromRational :: Fractional a => Rational -> a |||||
fst :: (a, b) -> a |||||
gcd :: (Integral a) => a -> a -> a |||||
getChar :: IO Char ||||| eof generates an IOError
getContents :: IO String |||||
getLine :: IO String ||||| eof generates an IOError
head :: [a] -> a |||||
id :: a -> a |||||
init :: [a] -> [a] ||||| init "abcd" = "abc"
interact :: (String -> String) -> IO () |||||
ioError :: IOError -> IO a |||||
isDenormalized :: RealFloat a => a -> Bool |||||
isIEEE :: RealFloat a => a -> Bool |||||
isInfinite :: RealFloat a => a -> Bool |||||
isNaN :: RealFloat a => a -> Bool |||||
isNegativeZero :: RealFloat a => a -> Bool |||||
iterate :: (a -> a) -> a -> [a] ||||| iterate (++ " ") "" = ["", " ", " ",...]
last :: [a] -> a ||||| last "abcde" = "e"
lcm :: Integral a => a -> a -> a |||||
length :: [a] -> Int ||||| length "Abc" = 3
lex :: ReadS String ||||| lex "abc def" = [("abc"," def")]
lines :: String -> [String] |||||
log :: Floating a => a -> a |||||
logBase :: Floating a => a -> a -> a |||||
lookup :: Eq a => a -> [(a, b)] -> Maybe b |||||
map :: (a -> b) -> [a] -> [b] |||||
mapM :: Monad m => (a -> m b) -> [a] -> m [b] |||||
mapM_ :: Monad m => (a -> m b) -> [a] -> m () |||||
max :: Ord a => a -> a -> a |||||
maxBound :: Bounded a => a |||||
maximum :: Ord a => [a] -> a |||||
maybe :: b -> (a -> b) -> Maybe a -> b ||||| maybe 0 (+1) (Just 1) = 2
min :: Ord a => a -> a -> a |||||
minBound :: Bounded a => a |||||
minimum :: Ord a => [a] -> a |||||
mod :: Integral a => a -> a -> a |||||
negate :: Num a => a -> a |||||
not :: Bool -> Bool |||||
notElem :: Eq a => a -> [a] -> Bool |||||
null :: [a] -> Bool |||||
odd :: Integral a => a -> Bool |||||
or :: [Bool] -> Bool |||||
otherwise :: Bool |||||
pi :: Floating a => a |||||
pred :: Enum a => a -> a ||||| pred True = False
print :: Show a => IO () ||||| adds a newline
product :: Num a => [a] -> a |||||
properFraction :: (RealFrac a, Integral b) => a -> (b, a) |||||
putChar :: Char -> IO () |||||
putStr :: String -> IO () |||||
putStrLn :: String -> IO () ||||| adds a newline
quot :: Integral a => a -> a -> a |||||
quotRem :: Integral a => a -> a -> (a, a) |||||
read :: Read a => String -> a |||||
readFile :: FilePath -> IO String |||||
readIO :: Read a => String -> IO a ||||| fails with IOError
readList :: Read a => ReadS [a] |||||
readLn :: Read a => IO a |||||
readParen :: Bool -> ReadS a -> ReadS a |||||
reads :: Read a => ReadS a ||||| reads "1 2" :: [(Int,String)] = [(1," 2")]
readsPrec :: Read a => Int -> ReadS a |||||
realToFrac :: (Real a, Fractional b) => a -> b |||||
recip :: Fractional a => a -> a |||||
rem :: Integral a => a -> a -> a |||||
repeat :: a -> [a] ||||| repeat \'a\' = "aaaaaaaaa..."
replicate :: Int -> a -> [a] ||||| replicate 4 \'a\' = "aaaa"
return :: Monad m => a -> m a |||||
reverse :: [a] -> [a] ||||| reverse "abc" = "cba"
round :: (RealFrac a, Integral b) => a -> b |||||
scaleFloat :: RealFloat a => Int -> a -> a |||||
scanl :: (a -> b -> a) -> a -> [b] -> [a] ||||| scanl (+) 0 [1,2,3] = [0,1,3,6]
scanl1 :: (a -> a -> a) -> [a] -> [a] ||||| scanl1 (+) [1,2,3] = [1,3,6]
scanr :: (a -> b -> b) -> b -> [a] -> [b] ||||| scanr (+) 0 [1,2,3] = [6,5,3,0]
scanr1 :: (a -> a -> a) -> [a] -> [a] ||||| scanr1 (+) [1,2,3] = [6,5,3]
seq :: a -> b -> b |||||
sequence :: Monad m => [m a] -> m [a] |||||
sequence_ :: Monad m => [m a] -> m () ||||| do operations in sequence
show :: Show a => a -> String |||||
showChar :: Char -> ShowS |||||
showList :: Show a => [a] -> ShowS |||||
showParen :: Bool -> ShowS -> ShowS |||||
showString :: String -> ShowS |||||
shows :: Show a => a -> ShowS |||||
showsPrec :: Show a => Int -> a -> ShowS |||||
significand :: RealFloat a => a -> a |||||
signum :: Num a => a -> a |||||
sin :: Floating a => a -> a |||||
sinh :: Floating a => a -> a |||||
snd :: (a, b) -> b |||||
span :: (a -> Bool) -> [a] -> ([a], [a]) ||||| span isAlpha "ab cd" = ("ab"," cd")
splitAt :: Int -> [a] -> ([a], [a]) ||||| splitAt 2 "abcdef" = ("ab","cdef")
sqrt :: Floating a => a -> a |||||
subtract :: Num a => a -> a -> a |||||
succ :: Enum a => a -> a ||||| succ False = True
sum :: Num a => [a] -> a ||||| sum [1,2,3] = 6
tail :: [a] -> [a] ||||| tail "abc" = "bc"
take :: Int -> [a] -> [a] ||||| take 3 "abcde" = "abc"
takeWhile :: (a -> Bool) -> [a] -> [a] ||||| takeWhile (> 2) [3,2,1] = [3]
tan :: Floating a => a -> a |||||
tanh :: Floating a => a -> a |||||
toEnum :: Enum a => Int -> a ||||| toEnum 0 :: Bool = False
toInteger :: Integral a => a -> Integer |||||
toRational :: Real a => a -> Rational |||||
truncate :: (RealFrac a, Integral b) => a -> b |||||
uncurry :: (a -> b -> c) -> ((a, b) -> c) |||||
undefined :: a |||||
unlines :: [String] -> String |||||
until :: (a -> Bool) -> (a -> a) -> a -> a ||||| until (> 3) (+ 2) 0 = 4
unwords :: [String] -> String |||||
unzip :: [(a, b)] -> ([a], [b]) ||||| unzip [(\'a\',\'b\'),(\'c\',\'d\')] = ("ac",bd")
unzip3 :: [(a, b, c)] -> ([a], [b], [c]) |||||
userError :: String -> IOError |||||
words :: String -> [String] ||||| words "ab d as+3" = ["ab","d","as+3"]
writeFile :: FilePath -> String -> IO () |||||
zip :: [a] -> [b] -> [(a, b)] ||||| zip "abc" "de" = [(\'a\',\'d\'), (\'b\',e\')]
zip3 :: [a] -> [b] -> [c] -> [(a, b, c)] |||||
zipWith :: (a -> b -> c) -> [a] -> [b] -> [c] ||||| zipWith (+) [1,2] [3,4] = [4,6]
zipWith3 :: (a -> b -> c -> d) -> [a] -> [b] -> [c] -> [d] |||||'
lookup = prelude.strip.split("\n").inject(Hash.new) { |h,l|
name, desc = l.split("::")
h[name.strip] = desc.split("|||||").map {|a| a.strip}
h
}
if lookup[word]
puts lookup[word]
else
STDIN.each do |line|
name, desc = line.strip.split("::")
if name and desc
if name.split(",").map{|s| s.strip}.include?(word)
puts desc.strip
exit
end
end
end
puts "☿ It is a mystery ☿"
end

View File

@@ -0,0 +1,711 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>fileTypes</key>
<array>
<string>hs</string>
</array>
<key>keyEquivalent</key>
<string>^~H</string>
<key>name</key>
<string>Haskell</string>
<key>patterns</key>
<array>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.entity.haskell</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.definition.entity.haskell</string>
</dict>
</dict>
<key>comment</key>
<string>In case this regex seems unusual for an infix operator, note that Haskell allows any ordinary function application (elem 4 [1..10]) to be rewritten as an infix expression (4 `elem` [1..10]).</string>
<key>match</key>
<string>(`)[\p{Ll}_][\p{Ll}_\p{Lu}\p{Lt}\p{Nd}']*(`)</string>
<key>name</key>
<string>keyword.operator.function.infix.haskell</string>
</dict>
<dict>
<key>match</key>
<string>\(\)</string>
<key>name</key>
<string>constant.language.unit.haskell</string>
</dict>
<dict>
<key>match</key>
<string>\[\]</string>
<key>name</key>
<string>constant.language.empty-list.haskell</string>
</dict>
<dict>
<key>begin</key>
<string>\b(module)\b</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.other.haskell</string>
</dict>
</dict>
<key>end</key>
<string>\b(where)\b</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.other.haskell</string>
</dict>
</dict>
<key>name</key>
<string>meta.declaration.module.haskell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#module_name</string>
</dict>
<dict>
<key>include</key>
<string>#module_exports</string>
</dict>
<dict>
<key>match</key>
<string>[a-z]+</string>
<key>name</key>
<string>invalid</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>\b(class)\b</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.other.haskell</string>
</dict>
</dict>
<key>end</key>
<string>\b(where)\b</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.other.haskell</string>
</dict>
</dict>
<key>name</key>
<string>meta.declaration.class.haskell</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\b(Monad|Functor|Eq|Ord|Read|Show|Num|(Frac|Ra)tional|Enum|Bounded|Real(Frac|Float)?|Integral|Floating)\b</string>
<key>name</key>
<string>support.class.prelude.haskell</string>
</dict>
<dict>
<key>match</key>
<string>[\p{Lu}\p{Lt}][\p{Ll}_\p{Lu}\p{Lt}\p{Nd}']*</string>
<key>name</key>
<string>entity.other.inherited-class.haskell</string>
</dict>
<dict>
<key>match</key>
<string>\b[\p{Ll}_][\p{Ll}_\p{Lu}\p{Lt}\p{Nd}']*</string>
<key>name</key>
<string>variable.other.generic-type.haskell</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>\b(instance)\b</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.other.haskell</string>
</dict>
</dict>
<key>end</key>
<string>\b(where)\b|$</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.other.haskell</string>
</dict>
</dict>
<key>name</key>
<string>meta.declaration.instance.haskell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#type_signature</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>\b(import)\b</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.other.haskell</string>
</dict>
</dict>
<key>end</key>
<string>($|;|(?=--))</string>
<key>name</key>
<string>meta.import.haskell</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>(qualified|as|hiding)</string>
<key>name</key>
<string>keyword.other.haskell</string>
</dict>
<dict>
<key>include</key>
<string>#module_name</string>
</dict>
<dict>
<key>include</key>
<string>#module_exports</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>(deriving)\s*\(</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>keyword.other.haskell</string>
</dict>
</dict>
<key>end</key>
<string>\)</string>
<key>name</key>
<string>meta.deriving.haskell</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\b[\p{Lu}\p{Lt}][\p{Ll}_\p{Lu}\p{Lt}\p{Nd}']*</string>
<key>name</key>
<string>entity.other.inherited-class.haskell</string>
</dict>
</array>
</dict>
<dict>
<key>match</key>
<string>\b(deriving|where|data|type|case|of|let|in|newtype|default)\b</string>
<key>name</key>
<string>keyword.other.haskell</string>
</dict>
<dict>
<key>match</key>
<string>\binfix[lr]?\b</string>
<key>name</key>
<string>keyword.operator.haskell</string>
</dict>
<dict>
<key>match</key>
<string>\b(do|if|then|else)\b</string>
<key>name</key>
<string>keyword.control.haskell</string>
</dict>
<dict>
<key>comment</key>
<string>Floats are always decimal</string>
<key>match</key>
<string>\b([0-9]+\.[0-9]+([eE][+-]?[0-9]+)?|[0-9]+[eE][+-]?[0-9]+)\b</string>
<key>name</key>
<string>constant.numeric.float.haskell</string>
</dict>
<dict>
<key>match</key>
<string>\b([0-9]+|0([xX][0-9a-fA-F]+|[oO][0-7]+))\b</string>
<key>name</key>
<string>constant.numeric.haskell</string>
</dict>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.preprocessor.c</string>
</dict>
</dict>
<key>comment</key>
<string>In addition to Haskell's "native" syntax, GHC permits the C preprocessor to be run on a source file.</string>
<key>match</key>
<string>^\s*(#)\s*\w+</string>
<key>name</key>
<string>meta.preprocessor.c</string>
</dict>
<dict>
<key>include</key>
<string>#pragma</string>
</dict>
<dict>
<key>begin</key>
<string>"</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.haskell</string>
</dict>
</dict>
<key>end</key>
<string>"</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.haskell</string>
</dict>
</dict>
<key>name</key>
<string>string.quoted.double.haskell</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\\(NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\"'\&amp;])</string>
<key>name</key>
<string>constant.character.escape.haskell</string>
</dict>
<dict>
<key>match</key>
<string>\\o[0-7]+|\\x[0-9A-Fa-f]+|\\[0-9]+</string>
<key>name</key>
<string>constant.character.escape.octal.haskell</string>
</dict>
<dict>
<key>match</key>
<string>\^[A-Z@\[\]\\\^_]</string>
<key>name</key>
<string>constant.character.escape.control.haskell</string>
</dict>
<dict>
<key>begin</key>
<string>\\\s</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>constant.character.escape.begin.haskell</string>
</dict>
</dict>
<key>end</key>
<string>\\</string>
<key>endCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>constant.character.escape.end.haskell</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\S+</string>
<key>name</key>
<string>invalid.illegal.character-not-allowed-here.haskell</string>
</dict>
</array>
</dict>
</array>
</dict>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.begin.haskell</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>constant.character.escape.haskell</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>constant.character.escape.octal.haskell</string>
</dict>
<key>4</key>
<dict>
<key>name</key>
<string>constant.character.escape.hexadecimal.haskell</string>
</dict>
<key>5</key>
<dict>
<key>name</key>
<string>constant.character.escape.control.haskell</string>
</dict>
<key>6</key>
<dict>
<key>name</key>
<string>punctuation.definition.string.end.haskell</string>
</dict>
</dict>
<key>match</key>
<string>(?x)
(')
(?:
[\ -\[\]-~] # Basic Char
| (\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE
|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS
|US|SP|DEL|[abfnrtv\\\"'\&amp;])) # Escapes
| (\\o[0-7]+) # Octal Escapes
| (\\x[0-9A-Fa-f]+) # Hexadecimal Escapes
| (\^[A-Z@\[\]\\\^_]) # Control Chars
)
(')
</string>
<key>name</key>
<string>string.quoted.single.haskell</string>
</dict>
<dict>
<key>begin</key>
<string>^\s*(?&lt;fn&gt;(?:[\p{Ll}_][\p{Ll}_\p{Lu}\p{Lt}\p{Nd}']*|\((?!--+\))((?![(),;\[\]`{}_"'])[\p{S}\p{P}])+\))(?:\s*,\s*\g&lt;fn&gt;)?)\s*(::)</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>[\p{Ll}_][\p{Ll}_\p{Lu}\p{Lt}\p{Nd}']*</string>
<key>name</key>
<string>entity.name.function.haskell</string>
</dict>
<dict>
<key>include</key>
<string>#infix_op</string>
</dict>
</array>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>keyword.other.double-colon.haskell</string>
</dict>
</dict>
<key>end</key>
<string>$\n?</string>
<key>name</key>
<string>meta.function.type-declaration.haskell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#type_signature</string>
</dict>
</array>
</dict>
<dict>
<key>match</key>
<string>\b(Just|Nothing|Left|Right|True|False|LT|EQ|GT|\(\)|\[\])\b</string>
<key>name</key>
<string>support.constant.haskell</string>
</dict>
<dict>
<key>match</key>
<string>\b[\p{Lu}\p{Lt}][\p{Ll}_\p{Lu}\p{Lt}\p{Nd}']*</string>
<key>name</key>
<string>constant.other.haskell</string>
</dict>
<dict>
<key>include</key>
<string>#comments</string>
</dict>
<dict>
<key>match</key>
<string>\b(abs|acos|acosh|all|and|any|appendFile|applyM|asTypeOf|asin|asinh|atan|atan2|atanh|break|catch|ceiling|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|div|divMod|drop|dropWhile|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromEnum|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|head|id|init|interact|ioError|isDenormalized|isIEEE|isInfinite|isNaN|isNegativeZero|iterate|last|lcm|length|lex|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|odd|or|otherwise|pi|pred|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|read|readFile|readIO|readList|readLn|readParen|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showList|showParen|showString|shows|showsPrec|significand|signum|sin|sinh|snd|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|toEnum|toInteger|toRational|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\b(?!')</string>
<key>name</key>
<string>support.function.prelude.haskell</string>
</dict>
<dict>
<key>include</key>
<string>#infix_op</string>
</dict>
<dict>
<key>comment</key>
<string>In case this regex seems overly general, note that Haskell permits the definition of new operators which can be nearly any string of punctuation characters, such as $%^&amp;*.</string>
<key>match</key>
<string>((?![(),;\[\]`{}_"'])[\p{S}\p{P}])+</string>
<key>name</key>
<string>keyword.operator.haskell</string>
</dict>
<dict>
<key>match</key>
<string>,</string>
<key>name</key>
<string>punctuation.separator.comma.haskell</string>
</dict>
</array>
<key>repository</key>
<dict>
<key>block_comment</key>
<dict>
<key>applyEndPatternLast</key>
<integer>1</integer>
<key>begin</key>
<string>\{-(?!#)</string>
<key>captures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.comment.haskell</string>
</dict>
</dict>
<key>end</key>
<string>-\}</string>
<key>name</key>
<string>comment.block.haskell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#block_comment</string>
</dict>
</array>
</dict>
<key>comments</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>(^[ \t]+)?(?=--+((?![\p{S}\p{P}])|[(),;\[\]`{}_"']))</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.whitespace.comment.leading.haskell</string>
</dict>
</dict>
<key>comment</key>
<string>Operators may begin with '--' as long as they are not entirely composed of '-' characters. This means comments can't be immediately followed by an allowable operator character.</string>
<key>end</key>
<string>(?!\G)</string>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>--</string>
<key>beginCaptures</key>
<dict>
<key>0</key>
<dict>
<key>name</key>
<string>punctuation.definition.comment.haskell</string>
</dict>
</dict>
<key>end</key>
<string>\n</string>
<key>name</key>
<string>comment.line.double-dash.haskell</string>
</dict>
</array>
</dict>
<dict>
<key>include</key>
<string>#block_comment</string>
</dict>
</array>
</dict>
<key>infix_op</key>
<dict>
<key>comment</key>
<string>An operator cannot be composed entirely of '-' characters; instead, it should be matched as a comment.</string>
<key>match</key>
<string>(\((?!--+\))((?![(),;\[\]`{}_"'])[\p{S}\p{P}])+\)|\(,+\))</string>
<key>name</key>
<string>entity.name.function.infix.haskell</string>
</dict>
<key>module_exports</key>
<dict>
<key>begin</key>
<string>\(</string>
<key>end</key>
<string>\)</string>
<key>name</key>
<string>meta.declaration.exports.haskell</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\b[\p{Ll}_][\p{Ll}_\p{Lu}\p{Lt}\p{Nd}']*</string>
<key>name</key>
<string>entity.name.function.haskell</string>
</dict>
<dict>
<key>match</key>
<string>\b[\p{Lu}\p{Lt}][\p{Ll}_\p{Lu}\p{Lt}\p{Nd}']*</string>
<key>name</key>
<string>storage.type.haskell</string>
</dict>
<dict>
<key>match</key>
<string>,</string>
<key>name</key>
<string>punctuation.separator.comma.haskell</string>
</dict>
<dict>
<key>include</key>
<string>#infix_op</string>
</dict>
<dict>
<key>comment</key>
<string>So named because I don't know what to call this.</string>
<key>match</key>
<string>\(.*?\)</string>
<key>name</key>
<string>meta.other.unknown.haskell</string>
</dict>
</array>
</dict>
<key>module_name</key>
<dict>
<key>match</key>
<string>(?&lt;conid&gt;[\p{Lu}\p{Lt}][\p{Ll}_\p{Lu}\p{Lt}\p{Nd}']*(\.\g&lt;conid&gt;)?)</string>
<key>name</key>
<string>support.other.module.haskell</string>
</dict>
<key>pragma</key>
<dict>
<key>begin</key>
<string>\{-#</string>
<key>end</key>
<string>#-\}</string>
<key>name</key>
<string>meta.preprocessor.haskell</string>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\b(LANGUAGE|UNPACK|INLINE)\b</string>
<key>name</key>
<string>keyword.other.preprocessor.haskell</string>
</dict>
</array>
</dict>
<key>type_signature</key>
<dict>
<key>patterns</key>
<array>
<dict>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>entity.other.inherited-class.haskell</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>variable.other.generic-type.haskell</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>keyword.other.big-arrow.haskell</string>
</dict>
</dict>
<key>match</key>
<string>\(\s*([\p{Lu}\p{Lt}][\p{Ll}_\p{Lu}\p{Lt}\p{Nd}']*)\s+([\p{Ll}_][\p{Ll}_\p{Lu}\p{Lt}\p{Nd}']*)\)\s*(=&gt;)</string>
<key>name</key>
<string>meta.class-constraint.haskell</string>
</dict>
<dict>
<key>include</key>
<string>#pragma</string>
</dict>
<dict>
<key>match</key>
<string>-&gt;</string>
<key>name</key>
<string>keyword.other.arrow.haskell</string>
</dict>
<dict>
<key>match</key>
<string>=&gt;</string>
<key>name</key>
<string>keyword.other.big-arrow.haskell</string>
</dict>
<dict>
<key>match</key>
<string>\b(Int(eger)?|Maybe|Either|Bool|Float|Double|Char|String|Ordering|ShowS|ReadS|FilePath|IO(Error)?)\b</string>
<key>name</key>
<string>support.type.prelude.haskell</string>
</dict>
<dict>
<key>match</key>
<string>\b[\p{Ll}_][\p{Ll}_\p{Lu}\p{Lt}\p{Nd}']*</string>
<key>name</key>
<string>variable.other.generic-type.haskell</string>
</dict>
<dict>
<key>match</key>
<string>\b[\p{Lu}\p{Lt}][\p{Ll}_\p{Lu}\p{Lt}\p{Nd}']*</string>
<key>name</key>
<string>storage.type.haskell</string>
</dict>
<dict>
<key>match</key>
<string>\(\)</string>
<key>name</key>
<string>support.constant.unit.haskell</string>
</dict>
<dict>
<key>include</key>
<string>#comments</string>
</dict>
</array>
</dict>
</dict>
<key>scopeName</key>
<string>source.haskell</string>
<key>uuid</key>
<string>5C034675-1F6D-497E-8073-369D37E2FD7D</string>
</dict>
</plist>

View File

@@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>fileTypes</key>
<array>
<string>lhs</string>
</array>
<key>keyEquivalent</key>
<string>^~H</string>
<key>name</key>
<string>Literate Haskell</string>
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<string>^((\\)begin)({)code(})(\s*\n)?</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>support.function.be.latex</string>
</dict>
<key>2</key>
<dict>
<key>name</key>
<string>punctuation.definition.function.latex</string>
</dict>
<key>3</key>
<dict>
<key>name</key>
<string>punctuation.definition.arguments.begin.latex</string>
</dict>
<key>4</key>
<dict>
<key>name</key>
<string>punctuation.definition.arguments.end.latex</string>
</dict>
</dict>
<key>contentName</key>
<string>source.haskell.embedded.latex</string>
<key>end</key>
<string>^((\\)end)({)code(})</string>
<key>name</key>
<string>meta.embedded.block.haskell.latex</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.haskell</string>
</dict>
</array>
</dict>
<dict>
<key>begin</key>
<string>^(&gt; )</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>punctuation.definition.bird-track.haskell</string>
</dict>
</dict>
<key>comment</key>
<string>This breaks type signature detection for now, but it's better than having no highlighting whatsoever.</string>
<key>contentName</key>
<string>source.haskell</string>
<key>end</key>
<string>$</string>
<key>name</key>
<string>meta.embedded.haskell</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>source.haskell</string>
</dict>
</array>
</dict>
<dict>
<key>include</key>
<string>text.tex.latex</string>
</dict>
</array>
<key>scopeName</key>
<string>text.tex.latex.haskell</string>
<key>uuid</key>
<string>439807F5-7129-487D-B5DC-95D5272B43DD</string>
</dict>
</plist>

View File

@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>contactEmailRot13</key>
<string>wnzvf@37fvtanyf.pbz</string>
<key>contactName</key>
<string>Jamis Buck</string>
<key>description</key>
<string>Support for &lt;a href="http://www.haskell.org/"&gt;Haskell&lt;/a&gt;, a general purpose, purely functional programming language featuring static typing, higher order functions, polymorphism, type classes, and monadic effects.</string>
<key>mainMenu</key>
<dict>
<key>items</key>
<array>
<string>3B083BE7-9812-4F06-A758-CCAD9514E797</string>
<string>2242C46C-153E-4EEB-B80B-A5398559D759</string>
<string>------------------------------------</string>
<string>6B723007-D4EE-476B-8282-76230C559D5A</string>
<string>50D814AE-D850-4C97-AF3E-1FDE4366C6A3</string>
<string>------------------------------------</string>
<string>FA4AA254-EB7D-4B43-AC67-066AA9E8E8D9</string>
<string>------------------------------------</string>
<string>A3A65891-D126-4D2D-9E6B-E20ADE2EAA88</string>
<string>21646767-DD1B-4BA9-BF3B-15968F8672AB</string>
<string>18F43074-566D-4AD9-8DCE-9C26B8516B64</string>
<string>CE424A97-E486-4DE7-9328-C6ADB99B4ABD</string>
<string>------------------------------------</string>
<string>89248B78-C2C6-48EE-BC47-CF8E9A5EA0E7</string>
</array>
<key>submenus</key>
<dict/>
</dict>
<key>name</key>
<string>Haskell</string>
<key>ordering</key>
<array>
<string>3B083BE7-9812-4F06-A758-CCAD9514E797</string>
<string>2242C46C-153E-4EEB-B80B-A5398559D759</string>
<string>6B723007-D4EE-476B-8282-76230C559D5A</string>
<string>50D814AE-D850-4C97-AF3E-1FDE4366C6A3</string>
<string>FA4AA254-EB7D-4B43-AC67-066AA9E8E8D9</string>
<string>A3A65891-D126-4D2D-9E6B-E20ADE2EAA88</string>
<string>21646767-DD1B-4BA9-BF3B-15968F8672AB</string>
<string>18F43074-566D-4AD9-8DCE-9C26B8516B64</string>
<string>CE424A97-E486-4DE7-9328-C6ADB99B4ABD</string>
<string>89248B78-C2C6-48EE-BC47-CF8E9A5EA0E7</string>
<string>4B154C05-D107-4316-9AAD-43A3DCF1860A</string>
<string>5C034675-1F6D-497E-8073-369D37E2FD7D</string>
<string>439807F5-7129-487D-B5DC-95D5272B43DD</string>
<string>E3994307-4D9E-44D6-832E-52C244F1CDF3</string>
<string>39417FB9-B85C-4213-BB1D-C19BCDD4E487</string>
<string>0C39B945-E2C0-4E43-8A5B-332F6FA73C67</string>
<string>FBF9D932-D5CE-4EC4-9162-122E511C8627</string>
</array>
<key>uuid</key>
<string>118557A4-4FEF-406D-A68E-BD191D9CBC83</string>
</dict>
</plist>