https://wiki.haskell.org/api.php?action=feedcontributions&user=Korpios&feedformat=atomHaskellWiki - User contributions [en]2024-03-28T11:29:57ZUser contributionsMediaWiki 1.35.5https://wiki.haskell.org/index.php?title=Keywords&diff=33681Keywords2010-02-19T15:59:56Z<p>Korpios: Merge the two entries for single-line comments</p>
<hr />
<div>This page lists all Haskell keywords, feel free to edit. [[Hoogle]] searches will return results from this page. Please respect the Anchor macros.<br />
<br />
For additional information you might want to look at [http://www.haskell.org/onlinereport/ the Haskell 98 report].<br />
<br />
=== . ===<br />
<br />
The dot "." is used to compose functions in point-free style, similar to "$".<br />
<br />
<haskell>foo = h . g . f</haskell><br />
is the same as<br />
<haskell>foo x = h $ g $ f x</haskell><br />
which is the same as<br />
<haskell>foo x = h (g (f x))</haskell><br />
<br />
<br />
== ` ==<br />
<br />
A function enclosed in back ticks "`" can be used as an infix operator.<br />
<br />
<haskell>2 `subtract` 10</haskell><br />
is the same as<br />
<haskell>subtract 2 10</haskell><br />
<br />
== | ==<br />
<br />
The "pipe" is used in several places<br />
<br />
* Data type definitions, "or"<br />
<haskell><br />
data Maybe a = Just a | Nothing<br />
</haskell><br />
<br />
* List comprehensions, "where"<br />
<haskell><br />
squares = [a*a | a <- [1..]]<br />
</haskell><br />
<br />
* Guards, "when"<br />
<haskell><br />
safeTail x | null x = []<br />
| otherwise = tail x<br />
</haskell><br />
<br />
* [[Functional dependencies]]<br />
<haskell><br />
-- This examples assumes that each type 'c' can "contain" only one type<br />
class Contains c elt | c -> elt where<br />
...<br />
<br />
</haskell><br />
<br />
<br />
== \ ==<br />
The backslash "\" is used<br />
<br />
* in multiline strings<br />
* in lambda functions<br />
<haskell><br />
\x -> x + 1<br />
</haskell><br />
<br />
== - ==<br />
This operator token is magic/irregular in the sense that<br />
<haskell>(- 1)</haskell><br />
is parsed as the negative integer -1, rather than as an operator [[section]], as it would be for any other operator:<br />
<haskell>(* 1) :: Num a => a -> a</haskell><br />
<haskell>(++ "foo") :: String -> String</haskell><br />
<br />
<br />
If you want the section, you can use the <hask>subtract</hask> function.<br />
<br />
== -- ==<br />
<br />
Starts a single-line comment, unless immediately followed by an operator character other than <hask>-</hask>:<br />
<br />
<haskell><br />
main = print "hello world" -- this is a comment<br />
--this is a comment as well<br />
---this too<br />
foobar --+ this_is_the_second_argument_of_the_dash_dash_plus_operator<br />
</haskell><br />
<br />
The multi-line variant for comments is <hask>{- comment -}</hask>.<br />
<br />
== -< ==<br />
[[Arrow notation]]<br />
<br />
== -<< ==<br />
[[Arrow notation]]<br />
<br />
<br />
== -> ==<br />
<br />
* The function type constructor:<br />
<haskell><br />
length :: [a] -> Int<br />
</haskell><br />
<br />
* In lambda functions:<br />
<haskell><br />
\x -> x + 1<br />
</haskell><br />
<br />
* To denote alternatives in case statements:<br />
<haskell><br />
case Just 3 of<br />
Nothing -> False<br />
Just x -> True<br />
</haskell><br />
<br />
* On the kind level (GHC specific):<br />
<haskell><br />
(->) :: ?? -> ? -> *<br />
</haskell><br />
<br />
* [[Functional dependencies]]<br />
<haskell><br />
-- This examples assumes that each type 'c' can "contain" only one type<br />
class Contains c elt | c -> elt where<br />
...<br />
<br />
</haskell><br />
<br />
== <- ==<br />
<br />
* In do-notation, "draw from":<br />
<haskell><br />
do x <- getChar<br />
putChar x<br />
</haskell><br />
<br />
* In list comprehension generators, "is drawn from":<br />
<haskell><br />
[ (x,y) | x <- [1..10], y <- ['a'..'z'] ]<br />
</haskell><br />
<br />
* In [[pattern guard | pattern guards]], "matches":<br />
<haskell><br />
f x y | Just z <- g x = True<br />
| otherwise = False<br />
</haskell><br />
<br />
== @ ==<br />
<br />
Patterns of the form var@pat are called as-patterns, and allow one to<br />
use var as a name for the value being matched by pat. For example:<br />
<haskell><br />
case e of { xs@(x:rest) -> if x==0 then rest else xs }<br />
</haskell><br />
<br />
is equivalent to:<br />
<br />
<haskell><br />
let { xs = e } in<br />
case xs of { (x:rest) -> if x==0 then rest else xs }<br />
</haskell><br />
<br />
== $ ==<br />
<br />
The dollar sign "$" is a way to compose functions, without typing too many brackets.<br />
<br />
<haskell>foo x = h $ g $ f x</haskell><br />
is the same as<br />
<haskell>foo x = h (g (f x))</haskell><br />
<br />
<br />
== ! ==<br />
<br />
Whenever a data [[constructor]] is applied, each argument to the<br />
constructor is evaluated if and only if the corresponding type in the<br />
algebraic data[[type]] declaration has a strictness flag, denoted by an<br />
exclamation point. For example:<br />
<br />
<haskell><br />
data STList a <br />
= STCons a !(STList a) -- the second argument to STCons will be <br />
-- evaluated before STCons is applied<br />
| STNil<br />
</haskell><br />
<br />
to illustrate the difference between strict versus lazy constructor<br />
application, consider the following:<br />
<br />
<haskell><br />
stList = STCons 1 undefined<br />
lzList = (:) 1 undefined<br />
stHead (STCons h _) = h -- this evaluates to undefined when applied to stList<br />
lzHead (h : _) = h -- this evaluates to 1 when applied to lzList<br />
</haskell><br />
<br />
! is also used in the [http://www.haskell.org/ghc/docs/latest/html/users_guide/bang-patterns.html "bang patterns"] (GHC extension), to indicate<br />
strictness in patterns:<br />
<br />
<haskell><br />
f !x !y = x + y<br />
</haskell><br />
<br />
Finally, it is the array subscript operator:<br />
<haskell><br />
let x = arr ! 10<br />
</haskell><br />
<br />
== : ==<br />
<br />
The colon ":" is an infix operator that adds an element to the beginning of a list.<br />
<br />
<haskell>1 : [2,3]</haskell><br />
will result in the new list<br />
<haskell>[1,2,3]</haskell><br />
<br />
== :: ==<br />
<br />
Read as "has type":<br />
<br />
<haskell><br />
length :: [a] -> Int<br />
</haskell><br />
<br />
"Length has type list-of-'a' to Int"<br />
<br />
== _ ==<br />
<br />
Patterns of the form _ are wildcards and are useful when some part of a<br />
pattern is not referenced on the right-hand-side. It is as if an<br />
identifier not used elsewhere were put in its place. For example,<br />
<br />
<haskell><br />
case e of { [x,_,_] -> if x==0 then True else False }<br />
</haskell><br />
<br />
is equivalent to:<br />
<br />
<haskell><br />
case e of { [x,y,z] -> if x==0 then True else False }<br />
</haskell><br />
<br />
== ~ ==<br />
<br />
Lazy pattern bindings. Matching the pattern ~pat against a value always<br />
suceeds, and matching will only diverge when one of the variables bound<br />
in the pattern is used.<br />
<br />
<haskell><br />
f1,f2 :: Maybe Int -> String;<br />
(+++),(++++) :: (a->b)->(c->d)->(a,c)->(b,d);<br />
<br />
f1 x = case x of {Just n -> "Got it"};<br />
f2 x = case x of {~(Just n) -> "Got it"};<br />
<br />
(f +++ g) ~(x,y) = (f x , g y);<br />
(f ++++ g) (x,y) = (f x , g y);<br />
</haskell><br />
<br />
Then we have:<br />
<br />
<haskell><br />
f1 Nothing<br />
Exception: Non-exhaustive patterns in case<br />
<br />
f2 Nothing<br />
"Got it"<br />
<br />
(const 1 +++ const 2) undefined<br />
(1,2)<br />
<br />
(const 1 ++++ const 2) undefined<br />
Exception: Prelude.undefined<br />
</haskell><br />
<br />
For more details see [http://en.wikibooks.org/wiki/Haskell/Laziness#Lazy_pattern_matching the Haskell Wikibook].<br />
<br />
== > ==<br />
<br />
In a Bird's style [[Literate_programming|Literate Haskell file]], the > character is used to introduce a code line.<br />
<br />
<haskell><br />
comment line<br />
<br />
> main = print "hello world"<br />
</haskell><br />
<br />
== {, } ==<br />
* Explicit block (disable [[layout]])<br />
<br />
* Record update notation<br />
<haskell><br />
changePrice :: Thing -> Price -> Thing<br />
changePrice x new = x { price = new }<br />
</haskell><br />
<br />
* Comments (see below)<br />
<br />
== {-, -} ==<br />
<br />
Multiline comment<br />
<haskell><br />
{-<br />
hello<br />
world<br />
-}<br />
</haskell><br />
<br />
== ; ==<br />
* Statement separator in an explicit block (see [[layout]])<br />
<br />
== as ==<br />
<br />
Renaming module imports. Like <hask>qualified</hask> and <hask>hiding</hask>, <hask>as</hask> is not a reserved word but may be used as function or variable name.<br />
<br />
<haskell><br />
import qualified Data.Map as M<br />
<br />
main = print (M.empty :: M.Map Int ())<br />
</haskell><br />
<br />
== <span id="case">case</span>, <span id="of">of</span> ==<br />
<br />
A case expression has the general form<br />
<br />
<haskell><br />
case e of { p1 match1 ; ... ; pn matchn }<br />
</haskell><br />
<br />
where each <code>match</code><sub>i</sub> is of the general form<br />
<br />
<haskell><br />
| g1 -> e1<br />
...<br />
| gm -> em<br />
where decls<br />
</haskell><br />
<br />
Each alternative consists of patterns <code>p</code><sub>i</sub> and their matches, <code>match</code><sub>i</sub>. Each<br />
<code>match</code><sub>i</sub> in turn consists of a sequence of pairs of guards <code>g</code><sub>ij</sub> and bodies <code>e</code><sub>ij</sub><br />
(expressions), followed by optional bindings (<code>decls</code><sub>i</sub>) that scope over all<br />
of the guards and expressions of the alternative. An alternative of the<br />
form<br />
<br />
<haskell><br />
pat -> exp where decls<br />
</haskell><br />
<br />
is treated as shorthand for:<br />
<br />
<haskell><br />
pat | True -> exp<br />
where decls<br />
</haskell><br />
<br />
A case expression must have at least one alternative and each<br />
alternative must have at least one body. Each body must have the same<br />
type, and the type of the whole expression is that type.<br />
<br />
A case expression is evaluated by pattern matching the expression <code>e</code><br />
against the individual alternatives. The alternatives are tried<br />
sequentially, from top to bottom. If <code>e</code> matches the pattern in the<br />
alternative, the guards for that alternative are tried sequentially from<br />
top to bottom, in the environment of the case expression extended first<br />
by the bindings created during the matching of the pattern, and then by<br />
the <code>decls</code><sub>i</sub>&nbsp; in the <code>where</code> clause associated with that alternative. If one<br />
of the guards evaluates to <code>True</code>, the corresponding right-hand side is<br />
evaluated in the same environment as the guard. If all the guards<br />
evaluate to <code>False</code>, matching continues with the next alternative. If no<br />
match succeeds, the result is _|_.<br />
<br />
== class ==<br />
<br />
A [http://haskell.org/onlinereport/decls.html#class-decls class declaration] <br />
introduces a new type class and the overloaded operations that must be<br />
supported by any type that is an instance of that class.<br />
<haskell><br />
class Num a where<br />
(+) :: a -> a -> a<br />
negate :: a -> a<br />
</haskell><br />
<br />
== data ==<br />
<br />
The [http://haskell.org/onlinereport/decls.html#user-defined-datatypes data] <br />
declaration is how one introduces new algebraic data [[type]]s into<br />
Haskell. For example:<br />
<br />
<haskell><br />
data Set a = NilSet <br />
| ConsSet a (Set a)<br />
</haskell><br />
<br />
Another example, to create a datatype to hold an [[Abstract_syntax_tree|abstract syntax tree]] for an expression, one could use:<br />
<br />
<haskell><br />
data Exp = Ebin Operator Exp Exp <br />
| Eunary Operator Exp <br />
| Efun FunctionIdentifier [Exp] <br />
| Eid SimpleIdentifier<br />
</haskell><br />
<br />
where the [[type]]s <code>Operator, FunctionIdentifier</code> and <code>SimpleIdentifier</code> are defined elsewhere. <br />
<br />
See the page on [[type]]s for more information, links and examples.<br />
<br />
== data family ==<br />
Declares a datatype family (see [[type families]]). GHC language extension.<br />
<br />
== data instance ==<br />
Declares a datatype family instance (see [[type families]]). GHC language extension.<br />
<br />
<br />
== default ==<br />
<br />
Ambiguities in the class Num are most common, so Haskell provides<br />
a way to resolve them---with a default declaration:<br />
<br />
<haskell><br />
default (Int)<br />
</haskell><br />
<br />
Only one default declaration is permitted per module, and its effect is<br />
limited to that module. If no default declaration is given in a module<br />
then it assumed to be:<br />
<br />
<haskell><br />
default (Integer, Double)<br />
</haskell><br />
<br />
== deriving ==<br />
<br />
data and newtype declarations contain an optional deriving form. If the<br />
form is included, then derived instance declarations are automatically<br />
generated for the datatype in each of the named classes.<br />
<br />
[http://haskell.org/onlinereport/decls.html#derived-decls Derived instances] provide convenient commonly-used operations for user-defined<br />
datatypes. For example, derived instances for datatypes in the class Eq<br />
define the operations == and /=, freeing the programmer from the need to<br />
define them.<br />
<br />
<haskell><br />
data T = A<br />
| B<br />
| C<br />
deriving (Eq, Ord, Show)<br />
</haskell><br />
<br />
In the case of newtypes, GHC extends this mechanism to [[Cunning Newtype Deriving]].<br />
<br />
== deriving instance ==<br />
<br />
Standalone deriving (GHC language extension).<br />
<br />
<haskell><br />
{-# LANGUAGE StandaloneDeriving #-}<br />
data A = A<br />
<br />
deriving instance Show A<br />
</haskell><br />
<br />
== do ==<br />
<br />
Syntactic sugar for use with monadic expressions. For example:<br />
<br />
<haskell><br />
do { x ; result <- y ; foo result }<br />
</haskell><br />
<br />
is shorthand for:<br />
<br />
<haskell><br />
x >> <br />
y >>= \result -><br />
foo result<br />
</haskell><br />
<br />
== forall ==<br />
<br />
This is a GHC/Hugs extension, and as such is not portable Haskell 98. <br />
It is only a reserved word within types. <br />
<br />
Type variables in a Haskell type expression are all assumed to be<br />
universally quantified; there is no explicit syntax for universal<br />
quantification, in standard Haskell 98. For example, the type expression<br />
<hask>a -> a</hask> denotes the type <hask>forall a. a ->a</hask>. <br />
For clarity, however, we often write quantification explicitly when<br />
discussing the types of Haskell programs. When we write an explicitly<br />
quantified type, the scope of the forall extends as far to the right as<br />
possible; for example, <br />
<haskell><br />
forall a. a -> a<br />
</haskell><br />
means <br />
<haskell><br />
forall a. (a -> a)<br />
</haskell><br />
<br />
GHC [http://www.haskell.org/ghc/docs/latest/html/users_guide/data-type-extensions.html#type-synonyms introduces] a <hask>forall</hask> keyword, allowing explicit quantification, for example, to encode <br />
[http://www.haskell.org/ghc/docs/latest/html/users_guide/data-type-extensions.html#existential-quantification existential types]: <br />
<haskell><br />
data Foo = forall a. MkFoo a (a -> Bool)<br />
| Nil<br />
<br />
MkFoo :: forall a. a -> (a -> Bool) -> Foo<br />
Nil :: Foo<br />
<br />
[MkFoo 3 even, MkFoo 'c' isUpper] :: [Foo]<br />
</haskell><br />
<br />
== foreign ==<br />
<br />
A keyword for the [[Foreign Function Interface]] (commonly called the FFI) that introduces either a <hask>foreign import</hask> declaration, which makes a function from a non-Haskell library available in a Haskell program, or a <hask>foreign export</hask> declaration, which allows a function from a Haskell module to be called in non-Haskell contexts.<br />
<br />
== hiding ==<br />
<br />
When importing modules, without introducing a name into scope, entities can be excluded by using the form<br />
<haskell><br />
hiding (import1 , ... , importn )<br />
</haskell><br />
which specifies that all entities exported by the named module should be<br />
imported except for those named in the list.<br />
<br />
For example:<br />
<haskell><br />
import Prelude hiding (lookup,filter,foldr,foldl,null,map)<br />
</haskell><br />
<br />
== <span id="if">if</span>, <span id="then">then</span>, <span id="else">else</span> ==<br />
<br />
A conditional expression has the form:<br />
<br />
<haskell><br />
if e1 then e2 else e3<br />
</haskell><br />
<br />
and returns the value of e2 if the value of e1 is True, e3 if e1 is False, and _|_ otherwise.<br />
<br />
<haskell><br />
max a b = if a > b then a else b<br />
</haskell><br />
<br />
== import ==<br />
<br />
[http://haskell.org/onlinereport/modules.html Modules] may reference<br />
other modules via explicit import declarations, each giving the name of<br />
a module to be imported and specifying its entities to be imported.<br />
<br />
For example:<br />
<haskell><br />
module Main where<br />
import A<br />
import B<br />
main = A.f >> B.f<br />
<br />
module A where<br />
f = ...<br />
<br />
module B where<br />
f = ...<br />
</haskell><br />
<br />
See also [[#as | as]], [[#hiding | hiding]] , [[#qualified | qualified]] and the page [[Import]]<br />
<br />
== <span id="infix">infix</span>, <span id="infixl">infixl</span>, <span id="infixr">infixr</span> ==<br />
<br />
A [http://haskell.org/onlinereport/decls.html fixity declaration] gives<br />
the fixity and binding precedence of one or more operators. The integer<br />
in a fixity declaration must be in the range 0 to 9. A fixity<br />
declaration may appear anywhere that a type signature appears and, like<br />
a type signature, declares a property of a particular operator.<br />
<br />
There are three kinds of fixity, non-, left- and right-associativity<br />
(infix, infixl, and infixr, respectively), and ten precedence levels, 0<br />
to 9 inclusive (level 0 binds least tightly, and level 9 binds most<br />
tightly).<br />
<br />
<haskell><br />
module Bar where<br />
infixr 7 `op`<br />
op = ...<br />
</haskell><br />
<br />
== instance ==<br />
<br />
An instance declaration declares that a type is an instance of a class<br />
and includes the definitions of the overloaded operations - called class<br />
methods - instantiated on the named type.<br />
<br />
<haskell><br />
instance Num Int where<br />
x + y = addInt x y<br />
negate x = negateInt x<br />
</haskell><br />
<br />
== <span id="let">let</span>, <span id="in">in</span> ==<br />
<br />
Let expressions have the general form:<br />
<br />
<haskell>let { d1 ; ... ; dn } in e</haskell><br />
<br />
They introduce a nested, lexically-scoped, mutually-recursive list of declarations (let is often called letrec in other languages). The scope of the declarations is the expression e and the right hand side of the declarations.<br />
<br />
Within <hask>do</hask>-blocks or list comprehensions <hask>let { d1 ; ... ; dn }</hask> without <hask>in</hask> serves to indroduce local bindings.<br />
<br />
== [http://www.haskell.org/ghc/docs/latest/html/users_guide/syntax-extns.html#id3017137 mdo] ==<br />
<br />
The recursive <hask>do</hask> keyword enabled by -fglasgow-exts<br />
<br />
== module ==<br />
<br />
Taken from: [http://www.haskell.org/tutorial/modules.html A Gentle Introduction to Haskell, Version 98]<br />
<br />
Technically speaking, a module is really just one big declaration which begins with the keyword module; here's an example for a module whose name is Tree:<br />
<br />
<haskell><br />
module Tree ( Tree(Leaf,Branch), fringe ) where<br />
<br />
data Tree a = Leaf a | Branch (Tree a) (Tree a) <br />
<br />
fringe :: Tree a -> [a]<br />
fringe (Leaf x) = [x]<br />
fringe (Branch left right) = fringe left ++ fringe right<br />
</haskell><br />
<br />
== newtype ==<br />
<br />
The <code>newtype</code> declaration is how one introduces a renaming for an algebraic data [[type]] into Haskell. This is different from <code>type</code> below, as a <code>newtype</code> requires a new [[constructor]] as well. As an example, when writing a compiler<br />
one sometimes further qualifies <code>Identifier</code>s to assist in type safety checks:<br />
<br />
newtype SimpleIdentifier = SimpleIdentifier Identifier<br />
newtype FunctionIdentifier = FunctionIdentifier Identifier<br />
<br />
Most often, one supplies [[smart constructors]] and [[destructor]]s for these to ease working with them.<br />
<br />
See the page on [[type]]s for more information, links and examples.<br />
<br />
For the differences between <code>newtype</code> and <code>data</code>, see [[Newtype]].<br />
<br />
== proc ==<br />
[[Arrow notation]]<br />
<br />
== qualified ==<br />
<br />
Used to import a module, but not introduce a name into scope. For example, Data.Map exports lookup, which would clash with the Prelude version of lookup, to fix this:<br />
<br />
<haskell><br />
import qualified Data.Map<br />
<br />
f x = lookup x -- use the Prelude version<br />
g x = Data.Map.lookup x -- use the Data.Map version<br />
</haskell><br />
<br />
Of course, Data.Map is a bit of a mouthful, so qualified also allows the use of as.<br />
<br />
<haskell><br />
import qualified Data.Map as M<br />
<br />
f x = lookup x -- use Prelude version<br />
g x = M.lookup x -- use Data.Map version<br />
</haskell><br />
<br />
== rec ==<br />
The [http://www.haskell.org/ghc/docs/latest/html/users_guide/syntax-extns.html#mdo-notation rec] keyword can be used when the <code>-XDoRec</code> flag is given; it allows recursive bindings in a do-block.<br />
<br />
<haskell><br />
{-# LANGUAGE DoRec #-}<br />
justOnes = do { rec { xs <- Just (1:xs) }<br />
; return (map negate xs) }<br />
</haskell><br />
<br />
== type ==<br />
<br />
The <code>type</code> declaration is how one introduces an alias for an algebraic data [[type]] into Haskell. As an example, when writing a compiler<br />
one often creates an alias for identifiers:<br />
<br />
<haskell><br />
type Identifier = String<br />
</haskell><br />
<br />
This allows you to use <code>Identifer</code> wherever you had used <code>String</code> and if something is of type <code>Identifier</code> it<br />
may be used wherever a <code>String</code> is expected.<br />
<br />
See the page on [[type]]s for more information, links and examples.<br />
<br />
Some common <code>type</code> declarations in the Prelude include:<br />
<br />
<haskell><br />
type FilePath = String<br />
type String = [Char]<br />
type Rational = Ratio Integer<br />
type ReadS a = String -> [(a,String)]<br />
type ShowS = String -> String<br />
</haskell><br />
<br />
== type family ==<br />
Declares a type synonym family (see [[type families]]). GHC language extension.<br />
<br />
== type instance ==<br />
Declares a type synonym family instance (see [[type families]]). GHC language extension.<br />
<br />
<br />
<br />
== where ==<br />
<br />
Used to introduce a module, instance or class:<br />
<haskell><br />
module Main where<br />
<br />
class Num a where<br />
...<br />
<br />
instance Num Int where<br />
...<br />
</haskell><br />
<br />
And to bind local variables:<br />
<haskell><br />
f x = y<br />
where y = x * 2<br />
<br />
g z | z > 2 = y<br />
where y = x * 2<br />
</haskell><br />
<br />
<br />
[[Category:Language]]</div>Korpioshttps://wiki.haskell.org/index.php?title=User_groups&diff=32691User groups2009-12-21T18:45:24Z<p>Korpios: update Chicago group info and URL</p>
<hr />
<div>[[Category:Community]]<br />
<br />
A range of Haskell User Groups are springing up all over. Also see a [http://www.frappr.com/haskellers Map of Haskellers].<br />
<br />
== User groups ==<br />
<br />
Regular meetings in a particular geographical area. Great if you want to see and meet other Haskellers.<br />
<br />
===North America===<br />
<br />
====West Coast ====<br />
<br />
;[http://socalfp.blogspot.com/ SoCal FP Group]<br />
<br />
;[http://bayfp.org/ The Bay Area Functional Programmers group]<br />
:Meeting monthly in the San Francisco Bay area. See [http://bayfp.org/blog their blog] for more details and news of upcoming meetings.<br />
<br />
;[http://pdxfunc.org PDXfunc: Portland FP Group]<br />
:Monthly meetings of the Portland, Oregon functional programming group. Meetings occur on the second Monday of each month at 7 pm, typically in Downtown/NW Portland.<br />
<br />
;[http://www.haskell.org/pipermail/haskell-cafe/2008-February/038991.html Seattle: Northwest Functional Programming Interest Group]<br />
:a Northwest Functional Programming Interest Group in Seattle.<br />
<br />
;[http://groups.google.com/group/hugvan Vancouver, Canada: Haskell Programmers Group]<br />
:Regular informal meetings for local Haskell programmers/devotees.<br />
<br />
====East Coast====<br />
<br />
;[http://article.gmane.org/gmane.comp.lang.haskell.cafe/21856 New York Functional Programmers Network]<br />
:Come and meet like-minded functional programmers in the New York area. The next meeting is at 6:30pm on February 26th, at Credit Suisse's offices. Paul Hudak from Yale will be giving a talk on real-time sound synthesis using Haskell. Please RSVP at the [http://lisp.meetup.com/59/ NYFPN Meetup Page].<br />
<br />
;[http://www.lisperati.com/fringedc.html FringeDC Washington]<br />
:Meetings about functional programming languages in Washington DC.<br />
<br />
====Central====<br />
<br />
;[http://leibnizdream.wordpress.com/2007/12/22/new-austin-functional-programmers-group-in-2008/ Austin Functional Programmers Group]<br />
:See the [http://groups.google.com/group/austin-fp discussion group] for more.<br />
<br />
;[http://groups.google.com/group/real-world-haskell-book-club/browse_thread/thread/3e8e59768c8c50a9 Colorado Area Haskell Study Group]<br />
<br />
;[http://groups.google.com/group/haskell-chicago Chicago Haskell User Group] — new group, had first general meeting in December 2009; meeting every other month.<br />
<br />
===Australia===<br />
<br />
;[http://groups.google.com/group/fp-syd FP-SYD, the Sydney (Australia) Functional Programming group]<br />
:FP hackers in Sydney.<br />
<br />
;[http://sites.google.com/site/fpunion/ (FPU) Melbourne Functional Programming Union]<br />
:The FPU is a collective of functional programming language enthusiasts, which has been in operation since 1998. We are based at the University of Melbourne, in the Department of Computer Science and Software Engineering, but we are open to all members of the community. We meet on a regular basis for lively discussions on topics broadly associated with the declarative programming paradigm.<br />
<br />
;[http://www.meetup.com/Brisbane-Functional-Programming-Group-BFG/ Brisbane Functional Programming Group]<br />
; A group for Functional Programming with Haskell, Scala and other languages.<br />
<br />
===Europe===<br />
<br />
;[http://www.londonhug.net/ London Haskell User Group]<br />
:The first meeting of the London Haskell User Group took place on 23rd May 2007, at City University in central London<br />
<br />
;Haskell in Leipzig<br />
:Hal, they have videos [http://iba-cg.de/haskell.html online].<br />
<br />
;[http://users.ecs.soton.ac.uk/pocm06r/fpsig/ Southampton University FPSIG]<br />
:The Functional Programming Special Interest Group of the University of Southampton is a meeting for people interested in FP and Haskell and meet weekly on Tuesdays at 11.30, on the Access Grid Room of Blg. 32<br />
<br />
;[http://oasis.yi.org/oasis/HUGZ Haskell User Group Zurich]<br />
:A user group for the haskell users residing in Zurich and surroundings. It's new and still being formed.<br />
<br />
;[[IsraelHaskell]] User Group<br />
:[http://article.gmane.org/gmane.comp.lang.haskell.cafe/28877 Are getting organised].<br />
<br />
;[http://spbhug.folding-maps.org Saint-Petersburg Haskell User Group]<br />
:The next meeting will be held in April, 2008.<br />
<br />
;[[ItaloHaskell]]<br />
:We had a first meeting in August 2008 and we are planning a second one sometime during the 2008/2009 Autumn/Winter season.<br />
<br />
;[[Reykjavik Haskell User Group]] Iceland<br />
;[http://groups.google.com/group/haskell-is Currently recruiting members]<br />
<br />
;[http://groups.google.com/group/core-haskell?lnk=srg Turkey Haskell Programmer's Group]<br />
:Formed by Turkish Functional Programmers, the group began to communicate via an e-mail list opened by core.gen.tr. The first contribution is hlibev project by Aycan iRiCAN.<br />
<br />
;[http://bilfp.wikidot.com/ BILFP (Bilkent University Comp. Eng. Dept. Functional Programming Society)] Turkey <br />
:Project aims to improve people's knowledge and encourage the use of functional programming languages &mdash; especially in Turkey. Group is open to functional-programming-related discussions and establishes related presentations at Bilkent University that are open to anybody.<br />
<br />
;[[Dutch HUG]]<br />
:The Dutch HUG meets monthly in an informal setting.<br />
<br />
;[http://groups.google.com/group/fp-southwales fp-southwales], the South Wales Functional Programming User Group<br />
:Starting up in late 2009, based out of Swansea University.<br />
<br />
===South America===<br />
<br />
;[http://groups.google.com/group/hug-br HUG-BR]<br />
:Haskell Users' Group for Brasil<br />
<br />
===Asia===<br />
<br />
;[http://lisp.org.cn/en/ China Lisp User Group]<br />
:China Lisp User Group (CLUG) is the earliest founded Lisp user group in China. <br />
<br />
;[http://www.starling-software.com/en/tsac.html Tokyo Society for the Application of Currying]<br />
<br />
== Workshops/meet ups ==<br />
<br />
Less regular, and move around. Usually have a few talks from invited speakers.<br />
<br />
;[[AngloHaskell]]<br />
:AngloHaskell is a Haskell meeting held in England once a year.<br />
<br />
;[[OzHaskell]]<br />
:Australian Haskell Programmer's Group<br />
<br />
;[[AmeroHaskell]]<br />
:USAsian Haskell Programmer's Group<br />
<br />
;[http://taichi.ddns.comp.nus.edu.sg/taichiwiki/SingHaskell2007 SingHaskell]<br />
:Sing(apore)Haskell is a Haskell (and related languages) meeting in Singapore<br />
* [http://www.comp.nus.edu.sg/~sulzmann/singhaskell07/index.html slides]<br />
<br />
;[http://www.comp.mq.edu.au/~asloane/pmwiki.php/SAPLING/HomePage Sydney Area Programming Languages Interest Group]<br />
:10am-4pm, June 12, 2007. Room T5, Building E7B, Macquarie University<br />
<br />
;[http://www.cs.uu.nl/~johanj/FPDag2008/ Utrecht Functioneel Programmeren dag 2008]<br />
:11 januari 2008<br />
<br />
== Hackathons ==<br />
<br />
Getting together to squash bugs and write new stuff. For a more complete list, see [[Hackathon]].<br />
<br />
;[http://haskell.org/haskellwiki/Hac_2007 Hackathons]<br />
:Hac 07 was held January 10-12, 2007, Oxford University Computing Laboratory<br />
<br />
;[http://haskell.org/haskellwiki/HaL3 HaL3 Hackathon]<br />
:HaL3 was held Apr 19-20, 2008, Leipzig<br />
<br />
;[[Hac5]]<br />
:Hac5 was held 17-19 April 2009 in Utrecht.<br />
<br />
== Conferences ==<br />
<br />
See the [[Conferences]] page for academic workshops and conferences<br />
focusing on Haskell and related technology</div>Korpioshttps://wiki.haskell.org/index.php?title=User_groups&diff=29538User groups2009-08-13T18:12:54Z<p>Korpios: add Chicago Haskell User Group</p>
<hr />
<div>[[Category:Community]]<br />
<br />
A range of Haskell User Groups are springing up all over. Also see a [http://www.frappr.com/haskellers Map of Haskellers].<br />
<br />
== User groups ==<br />
<br />
Regular meetings in a particular geographical area. Great if you want to see and meet other Haskellers.<br />
<br />
===North America===<br />
<br />
====West Coast ====<br />
<br />
;[http://socalfp.blogspot.com/ SoCal FP Group]<br />
<br />
;[http://bayfp.org/ The Bay Area Functional Programmers group]<br />
:Meeting monthly in the San Francisco Bay area. See [http://bayfp.org/blog their blog] for more details and news of upcoming meetings.<br />
<br />
;[http://groups.google.com/group/pdxfunc PDXfunc: Portland FP Group]<br />
:Monthly meetings of the Portland, Oregon functional programming group. Meetings occur on the second Monday of each month at 7 pm. They are held at [http://www.cubespacepdx.com CubeSpace] on 6th & Grant ([http://www.cubespacepdx.com/directions directions]), which generously provides the space free of charge. <br />
<br />
;[http://www.haskell.org/pipermail/haskell-cafe/2008-February/038991.html Seattle: Northwest Functional Programming Interest Group]<br />
:a Northwest Functional Programming Interest Group in Seattle.<br />
<br />
;[http://groups.google.com/group/hugvan Vancouver, Canada: Haskell Programmers Group]<br />
:Regular informal meetings for local Haskell programmers/devotees.<br />
<br />
====East Coast====<br />
<br />
;[http://article.gmane.org/gmane.comp.lang.haskell.cafe/21856 New York Functional Programmers Network]<br />
:Come and meet like-minded functional programmers in the New York area. The next meeting is at 6:30pm on February 26th, at Credit Suisse's offices. Paul Hudak from Yale will be giving a talk on real-time sound synthesis using Haskell. Please RSVP at the [http://lisp.meetup.com/59/ NYFPN Meetup Page].<br />
<br />
;[http://www.lisperati.com/fringedc.html FringeDC Washington]<br />
:Meetings about functional programming languages in Washington DC.<br />
<br />
====Central====<br />
<br />
;[http://leibnizdream.wordpress.com/2007/12/22/new-austin-functional-programmers-group-in-2008/ Austin Functional Programmers Group]<br />
:See the [http://groups.google.com/group/austin-fp discussion group] for more.<br />
<br />
;[http://groups.google.com/group/real-world-haskell-book-club/browse_thread/thread/3e8e59768c8c50a9 Colorado Area Haskell Study Group]<br />
<br />
;[http://www.facebook.com/pages/Chicago-IL/Chicago-Haskell-User-Group/115989593098 Chicago Haskell User Group] — brand new (August 2009) and still organizing.<br />
<br />
===Australia===<br />
<br />
;[http://groups.google.com/group/fp-syd FP-SYD, the Sydney (Australia) Functional Programming group]<br />
:FP hackers in Sydney.<br />
<br />
;[http://sites.google.com/site/fpunion/ (FPU) Melbourne Functional Programming Union]<br />
:The FPU is a collective of functional programming language enthusiasts, which has been in operation since 1998. We are based at the University of Melbourne, in the Department of Computer Science and Software Engineering, but we are open to all members of the community. We meet on a regular basis for lively discussions on topics broadly associated with the declarative programming paradigm.<br />
<br />
;[http://www.meetup.com/Brisbane-Functional-Programming-Group-BFG/ Brisbane Functional Programming Group]<br />
; A group for Functional Programming with Haskell, Scala and other languages.<br />
<br />
===Europe===<br />
<br />
;[http://www.londonhug.net/ London Haskell User Group]<br />
:The first meeting of the London Haskell User Group took place on 23rd May 2007, at City University in central London<br />
<br />
;Haskell in Leipzig<br />
:Hal, they have videos [http://iba-cg.de/haskell.html online].<br />
<br />
;[http://users.ecs.soton.ac.uk/pocm06r/fpsig/ Southampton University FPSIG]<br />
:The Functional Programming Special Interest Group of the University of Southampton is a meeting for people interested in FP and Haskell and meet weekly on Tuesdays at 11.30, on the Access Grid Room of Blg. 32<br />
<br />
;[http://oasis.yi.org/oasis/HUGZ Haskell User Group Zurich]<br />
:A user group for the haskell users residing in Zurich and surroundings. It's new and still being formed.<br />
<br />
;[[IsraelHaskell]] User Group<br />
:[http://article.gmane.org/gmane.comp.lang.haskell.cafe/28877 Are getting organised].<br />
<br />
;[http://spbhug.folding-maps.org Saint-Petersburg Haskell User Group]<br />
:The next meeting will be held in April, 2008.<br />
<br />
;[[ItaloHaskell]]<br />
:We had a first meeting in August 2008 and we are planning a second one sometime during the 2008/2009 Autumn/Winter season.<br />
<br />
;[[Reykjavik Haskell User Group]] Iceland<br />
;[http://groups.google.com/group/haskell-is Currently recruiting members]<br />
<br />
;[http://groups.google.com/group/core-haskell?lnk=srg Turkey Haskell Programmer's Group]<br />
:Formed by Turkish Functional Programmers, the group began to communicate via an e-mail list opened by core.gen.tr. The first contribution is hlibev project by Aycan iRiCAN. <br />
<br />
;[[Dutch HUG]]<br />
:The Dutch HUG meets monthly in an informal setting.<br />
<br />
===South America===<br />
<br />
;[http://groups.google.com/group/hug-br HUG-BR]<br />
:Haskell Users' Group for Brasil<br />
<br />
===Asia===<br />
<br />
;[http://www.starling-software.com/en/tsac.html Tokyo Society for the Application of Currying]<br />
<br />
== Workshops/meet ups ==<br />
<br />
Less regular, and move around. Usually have a few talks from invited speakers.<br />
<br />
;[[AngloHaskell]]<br />
:AngloHaskell is a Haskell meeting held in England once a year.<br />
<br />
;[[OzHaskell]]<br />
:Australian Haskell Programmer's Group<br />
<br />
;[[AmeroHaskell]]<br />
:USAsian Haskell Programmer's Group<br />
<br />
;[http://taichi.ddns.comp.nus.edu.sg/taichiwiki/SingHaskell2007 SingHaskell]<br />
:Sing(apore)Haskell is a Haskell (and related languages) meeting in Singapore<br />
* [http://www.comp.nus.edu.sg/~sulzmann/singhaskell07/index.html slides]<br />
<br />
;[http://www.comp.mq.edu.au/~asloane/pmwiki.php/SAPLING/HomePage Sydney Area Programming Languages Interest Group]<br />
:10am-4pm, June 12, 2007. Room T5, Building E7B, Macquarie University<br />
<br />
;[http://www.cs.uu.nl/~johanj/FPDag2008/ Utrecht Functioneel Programmeren dag 2008]<br />
:11 januari 2008<br />
<br />
== Hackathons ==<br />
<br />
Getting together to squash bugs and write new stuff. For a more complete list, see [[Hackathon]].<br />
<br />
;[http://haskell.org/haskellwiki/Hac_2007 Hackathons]<br />
:Hac 07 was held January 10-12, 2007, Oxford University Computing Laboratory<br />
<br />
;[http://haskell.org/haskellwiki/HaL3 HaL3 Hackathon]<br />
:HaL3 was held Apr 19-20, 2008, Leipzig<br />
<br />
;[[Hac5]]<br />
:Hac5 was held 17-19 April 2009 in Utrecht.<br />
<br />
== Conferences ==<br />
<br />
See the [[Conferences]] page for academic workshops and conferences<br />
focusing on Haskell and related technology</div>Korpios