As of May, 25th 2022, this project is officially unmaintained. If you would like to take over, drop a message to @lierdakil.
If you're looking for a decent editor support for Haskell, consider using VSCode with Haskell extensions.
Language-Haskell adds syntax highlighting and snippets to Haskell files in Atom.
If you don’t like current auto-indentation settings, you can define your own regular expression in config.cson
(Edit -> Open Your Config), or disable it altogether.
Atom is using oniguruma for regular expression, and, as such, expression has to be a string, not a javascript regexp. You’ll also have to escape \
.
To disable auto-indent:
".haskell.source":
editor:
increaseIndentPattern: ''
By default, increaseIndentPattern
has the following value:
".haskell.source":
editor:
increaseIndentPattern: '(((=|\\bdo|\\bwhere|\\bthen|\\belse|\\bof)\\s*)|(\\bif(?!.*\\bthen\\b.*\\belse\\b.*).*))$'
You may need to reopen currently opened files (or restart Atom) for your new stylesheet to be applied.
language-haskell
uses support.other.module.haskell
scope for module names, both in import
statements and when using qualified identifiers (like Prelude.foldl
). Your syntax theme might not support this scope. If you want to highlight module names in this case, you can add the following to your stylesheet (Edit → Stylesheet…):
.syntax--support.syntax--other.syntax--module.syntax--haskell {
color: #C0A077; //or whatever color you like
}
language-haskell
uses keyword.operator.haskell
scope for operators and keyword.operator.infix.haskell
for infix function application, e.g.
negate `map` [1..10]
Not all syntax themes support these scopes (almost none support keyword.operator.infix
particularly)
If you want to highlight operators and infix function applications you can add the following to your stylesheet (Edit → Stylesheet…):
.syntax--keyword.syntax--operator.syntax--haskell {
color: #CF8C00; // or whatever color you like
}
.syntax--keyword.syntax--operator.syntax--infix.syntax--haskell {
color: #CC77AC; // if you want to highlight infix application differently
}
Prelude
treatmentFor historical and other reasons (see #85 for discussion), Prelude
identifiers (functions, types, etc) are treated slightly differently and, depending on your highlighting theme, can be highlighted differently.
Scopes that are used:
support.function.prelude.haskell
for functions and valuessupport.class.prelude.haskell
for typessupport.operator.prelude.haskell
for infix operators (like ++
)entity.other.inherited-class.prelude.haskell
for typeclassessupport.tag.prelude.haskell
for type constructorsIf you want Prelude
identifiers highlighted differently from all the rest, you can define different colors for all or some of those, f.ex. by adding something like this to your stylesheet (Edit → Stylesheet…):
.syntax--support.syntax--function.syntax--prelude.syntax--haskell {
color: #56b6c2; // or whatever color you like
}
.syntax--support.syntax--tag.syntax--prelude.syntax--haskell {
color: #e9969d;
}
If you don’t want Prelude
identifiers highlighted differently, you can override it by adding something like this to your stylesheet (Edit → Stylesheet…):
.syntax--prelude.syntax--haskell {
color: inherit;
}
Every Prelude identifier except operators has a scope corresponding to its name added, so you can add special highlighting to particular identifiers only.
For example, if you would like to highlight undefined
and error
in angry bold red, you can add something like this to your stylesheet:
.syntax--support.syntax--function.syntax--prelude.syntax--haskell {
&.syntax--undefined, &.syntax--error {
color: red;
font-weight: bold;
}
}
All identifier scopes are case-sensitive, so, if you want to highlight, f.ex. IO
, you would use support.class.prelude.IO.haskell
scope.