hommage-0.0.5: doc/Sound.Hommage.Parameter.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--Rendered using the Haskell Html Library v0.2-->
<HTML
><HEAD
><TITLE
>Sound.Hommage.Parameter</TITLE
><LINK HREF = "haddock.css" REL = "stylesheet" TYPE = "text/css"
></HEAD
><BODY
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "topbar"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD
><IMG SRC = "haskell_icon.gif" WIDTH = "16" HEIGHT = "16" ALT = " "
></TD
><TD CLASS = "title"
></TD
><TD CLASS = "topbut"
><A HREF = "Sound.Hommage.html"
>Parent</A
></TD
><TD CLASS = "topbut"
><A HREF = "index.html"
>Contents</A
></TD
><TD CLASS = "topbut"
><A HREF = "doc-index.html"
>Index</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "modulebar"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD
><FONT SIZE = "6"
>Sound.Hommage.Parameter</FONT
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "section4"
><B
>Contents</B
></TD
></TR
><TR
><TD
><DL
><DT
><A HREF = "#1"
> Field</A
></DT
><DT
><A HREF = "#2"
> Hetero List</A
></DT
></DL
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "section1"
>Description</TD
></TR
><TR
><TD CLASS = "doc"
> This module contains a datatype <TT
><A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
></TT
> and sone type classes. It is used
to construct record-like datatypes.</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "section1"
>Synopsis</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>data</SPAN
> <A HREF = "#t%3AField"
>Field</A
> c a = <A HREF = "#v%3AField"
>Field</A
> {<TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "recfield"
><A HREF = "#v%3AgetField"
>getField</A
> :: (c -> a)</TD
></TR
><TR
><TD CLASS = "recfield"
><A HREF = "#v%3AsetField"
>setField</A
> :: ((a -> a) -> c -> c)</TD
></TR
></TABLE
>}</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3A%3C%3E"
>(<>)</A
> :: <A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> a b -> <A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> c a -> <A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> c b</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AfstField"
>fstField</A
> :: <A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> (a, b) a</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AsndField"
>sndField</A
> :: <A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> (a, b) b</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>data</SPAN
> <A HREF = "#t%3AUpdateField"
>UpdateField</A
> c</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
>= <SPAN CLASS = "keyword"
>forall</SPAN
> a . <A HREF = "#v%3A%3A%3D"
>(:=)</A
> (<A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> c a) a</TD
></TR
><TR
><TD CLASS = "decl"
>| <SPAN CLASS = "keyword"
>forall</SPAN
> a . <A HREF = "#v%3A%3A%24"
>(:$)</A
> (<A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> c a) (a -> a)</TD
></TR
><TR
><TD CLASS = "decl"
>| <A HREF = "#v%3AIf"
>If</A
> (<A HREF = "Sound.Hommage.Parameter.html#t%3ACheckField"
>CheckField</A
> c) [<A HREF = "Sound.Hommage.Parameter.html#t%3AUpdateField"
>UpdateField</A
> c] [<A HREF = "Sound.Hommage.Parameter.html#t%3AUpdateField"
>UpdateField</A
> c]</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>data</SPAN
> <A HREF = "#t%3ACheckField"
>CheckField</A
> c</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
>= <SPAN CLASS = "keyword"
>forall</SPAN
> a . <A HREF = "#v%3A%3A%3F"
>(:?)</A
> (<A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> c a) (a -> Bool)</TD
></TR
><TR
><TD CLASS = "decl"
>| <A HREF = "#v%3AAnd"
>And</A
> [<A HREF = "Sound.Hommage.Parameter.html#t%3ACheckField"
>CheckField</A
> c]</TD
></TR
><TR
><TD CLASS = "decl"
>| <A HREF = "#v%3AOr"
>Or</A
> [<A HREF = "Sound.Hommage.Parameter.html#t%3ACheckField"
>CheckField</A
> c]</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AupdateField"
>updateField</A
> :: <A HREF = "Sound.Hommage.Parameter.html#t%3AUpdateField"
>UpdateField</A
> c -> c -> c</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AcheckField"
>checkField</A
> :: <A HREF = "Sound.Hommage.Parameter.html#t%3ACheckField"
>CheckField</A
> c -> c -> Bool</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AapplyField"
>applyField</A
> :: [<A HREF = "Sound.Hommage.Parameter.html#t%3AUpdateField"
>UpdateField</A
> c] -> c -> c</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AwithField"
>withField</A
> :: [<A HREF = "Sound.Hommage.Parameter.html#t%3AUpdateField"
>UpdateField</A
> a] -> (a -> b) -> a -> b</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>data</SPAN
> <A HREF = "#t%3AGroup"
>Group</A
> c a = <A HREF = "#v%3AGroup"
>Group</A
> {<TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "recfield"
><A HREF = "#v%3AisGroup"
>isGroup</A
> :: (c -> Maybe a)</TD
></TR
><TR
><TD CLASS = "recfield"
><A HREF = "#v%3AmkGroup"
>mkGroup</A
> :: (a -> c)</TD
></TR
></TABLE
>}</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AleftGroup"
>leftGroup</A
> :: <A HREF = "Sound.Hommage.Parameter.html#t%3AGroup"
>Group</A
> (Either a b) a</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3ArightGroup"
>rightGroup</A
> :: <A HREF = "Sound.Hommage.Parameter.html#t%3AGroup"
>Group</A
> (Either a b) b</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "#v%3A%3E%3C"
>(><)</A
> :: <A HREF = "Sound.Hommage.Parameter.html#t%3AGroup"
>Group</A
> a b -> <A HREF = "Sound.Hommage.Parameter.html#t%3AGroup"
>Group</A
> c a -> <A HREF = "Sound.Hommage.Parameter.html#t%3AGroup"
>Group</A
> c b</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>data</SPAN
> <A HREF = "#t%3ALM"
>LM</A
> a b m = <A HREF = "#v%3A%3A%3E%3E"
>(:>>)</A
> (m a) (b m)</TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>data</SPAN
> <A HREF = "#t%3ANilM"
>NilM</A
> m = <A HREF = "#v%3ANilM"
>NilM</A
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>class</SPAN
> <A HREF = "#t%3APushFields"
>PushFields</A
> m <SPAN CLASS = "keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A HREF = "#v%3ApushFields"
>pushFields</A
> :: m (<A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> c) -> m (<A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> (x, c))</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>class</SPAN
> <A HREF = "#t%3AToFields"
>ToFields</A
> a r <SPAN CLASS = "keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AtoFields"
>toFields</A
> :: a -> r (<A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> a)</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>class</SPAN
> <A HREF = "#t%3APushGroups"
>PushGroups</A
> m <SPAN CLASS = "keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A HREF = "#v%3ApushGroups"
>pushGroups</A
> :: m (<A HREF = "Sound.Hommage.Parameter.html#t%3AGroup"
>Group</A
> c) -> m (<A HREF = "Sound.Hommage.Parameter.html#t%3AGroup"
>Group</A
> (Either x c))</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>class</SPAN
> <A HREF = "#t%3AToGroups"
>ToGroups</A
> a r <SPAN CLASS = "keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A HREF = "#v%3AtoGroups"
>toGroups</A
> :: a -> r (<A HREF = "Sound.Hommage.Parameter.html#t%3AGroup"
>Group</A
> a)</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "section1"
>Documentation</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "doc"
><P
> Example:</P
><P
> To create a "record" with the accessors/modificators first you have to define the type
of the record, It must be a right-associative list of pairs, just like a LISP list.
The rightmost element must be <TT
> () </TT
>. The following Example defines a record with information
for music generation. </P
><PRE
> type DefaultNote = (Int, (Double, (Char, ()))) </PRE
><P
> Then a default value should be defined. </P
><PRE
> defaultNote = (0, (1.0, ('a' , ())))
defaultNote :: DefaultNote </PRE
><P
> For each "datafield" the <TT
><A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
></TT
> must be declared.</P
><PRE
> pitch :: Field DefaultNote Int
volume :: Field DefaultNote Double
channel :: Field DefaultNote Char </PRE
><P
> Creating the fields is done with toField applied to a value of the "record" type.</P
><PRE
> pitch :>> volume :>> channel :>> NilM = toFields defaultNote </PRE
><P
> Is is recommended to declare all types and match all results of <TT
><A HREF = "Sound.Hommage.Parameter.html#v%3AtoFields"
>toFields</A
></TT
> incl. the <TT
><A HREF = "Sound.Hommage.Parameter.html#t%3ANilM"
>NilM</A
></TT
> at
the end.</P
><P
> NOTE:</P
><PRE
> pitch :>> volume :>> channel :>> NilM = toFields (undefined :: DefaultNote)</PRE
><P
> should work too.
</P
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "section1"
><A NAME = "1"
> Field</A
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>data</SPAN
> <A NAME = "t%3AField"
></A
><B
>Field</B
> c a</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "ndoc"
> A <TT
> Field record field </TT
> is an interface to access a type <TT
> field </TT
> which
is part of a type <TT
> record </TT
>.
A <TT
><A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
></TT
> is used to access and modify subtypes ("datafields") of
a record-like datastructure. In this module, a right-associative pair structure is
taken as record-type with "datafields" in the fst parts of the pairs.</TD
></TR
><TR
><TD CLASS = "section4"
>Constructors</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "5" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A NAME = "v%3AField"
></A
><B
>Field</B
></TD
><TD CLASS = "rdoc"
></TD
></TR
><TR
><TD CLASS = "body" COLSPAN = "2"
><TABLE CLASS = "vanilla" CELLSPACING = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A NAME = "v%3AgetField"
></A
><B
>getField</B
> :: (c -> a)</TD
><TD CLASS = "rdoc"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AsetField"
></A
><B
>setField</B
> :: ((a -> a) -> c -> c)</TD
><TD CLASS = "rdoc"
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3A%3C%3E"
></A
><B
>(<>)</B
> :: <A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> a b -> <A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> c a -> <A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> c b</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AfstField"
></A
><B
>fstField</B
> :: <A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> (a, b) a</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AsndField"
></A
><B
>sndField</B
> :: <A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> (a, b) b</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>data</SPAN
> <A NAME = "t%3AUpdateField"
></A
><B
>UpdateField</B
> c</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "section4"
>Constructors</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>forall</SPAN
> a . <A NAME = "v%3A%3A%3D"
></A
><B
>(:=)</B
> (<A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> c a) a</TD
><TD CLASS = "rdoc"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>forall</SPAN
> a . <A NAME = "v%3A%3A%24"
></A
><B
>(:$)</B
> (<A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> c a) (a -> a)</TD
><TD CLASS = "rdoc"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AIf"
></A
><B
>If</B
> (<A HREF = "Sound.Hommage.Parameter.html#t%3ACheckField"
>CheckField</A
> c) [<A HREF = "Sound.Hommage.Parameter.html#t%3AUpdateField"
>UpdateField</A
> c] [<A HREF = "Sound.Hommage.Parameter.html#t%3AUpdateField"
>UpdateField</A
> c]</TD
><TD CLASS = "rdoc"
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>data</SPAN
> <A NAME = "t%3ACheckField"
></A
><B
>CheckField</B
> c</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "section4"
>Constructors</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>forall</SPAN
> a . <A NAME = "v%3A%3A%3F"
></A
><B
>(:?)</B
> (<A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> c a) (a -> Bool)</TD
><TD CLASS = "rdoc"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AAnd"
></A
><B
>And</B
> [<A HREF = "Sound.Hommage.Parameter.html#t%3ACheckField"
>CheckField</A
> c]</TD
><TD CLASS = "rdoc"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AOr"
></A
><B
>Or</B
> [<A HREF = "Sound.Hommage.Parameter.html#t%3ACheckField"
>CheckField</A
> c]</TD
><TD CLASS = "rdoc"
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AupdateField"
></A
><B
>updateField</B
> :: <A HREF = "Sound.Hommage.Parameter.html#t%3AUpdateField"
>UpdateField</A
> c -> c -> c</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AcheckField"
></A
><B
>checkField</B
> :: <A HREF = "Sound.Hommage.Parameter.html#t%3ACheckField"
>CheckField</A
> c -> c -> Bool</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AapplyField"
></A
><B
>applyField</B
> :: [<A HREF = "Sound.Hommage.Parameter.html#t%3AUpdateField"
>UpdateField</A
> c] -> c -> c</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AwithField"
></A
><B
>withField</B
> :: [<A HREF = "Sound.Hommage.Parameter.html#t%3AUpdateField"
>UpdateField</A
> a] -> (a -> b) -> a -> b</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>data</SPAN
> <A NAME = "t%3AGroup"
></A
><B
>Group</B
> c a</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "section4"
>Constructors</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "5" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A NAME = "v%3AGroup"
></A
><B
>Group</B
></TD
><TD CLASS = "rdoc"
></TD
></TR
><TR
><TD CLASS = "body" COLSPAN = "2"
><TABLE CLASS = "vanilla" CELLSPACING = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A NAME = "v%3AisGroup"
></A
><B
>isGroup</B
> :: (c -> Maybe a)</TD
><TD CLASS = "rdoc"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AmkGroup"
></A
><B
>mkGroup</B
> :: (a -> c)</TD
><TD CLASS = "rdoc"
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3AleftGroup"
></A
><B
>leftGroup</B
> :: <A HREF = "Sound.Hommage.Parameter.html#t%3AGroup"
>Group</A
> (Either a b) a</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3ArightGroup"
></A
><B
>rightGroup</B
> :: <A HREF = "Sound.Hommage.Parameter.html#t%3AGroup"
>Group</A
> (Either a b) b</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><A NAME = "v%3A%3E%3C"
></A
><B
>(><)</B
> :: <A HREF = "Sound.Hommage.Parameter.html#t%3AGroup"
>Group</A
> a b -> <A HREF = "Sound.Hommage.Parameter.html#t%3AGroup"
>Group</A
> c a -> <A HREF = "Sound.Hommage.Parameter.html#t%3AGroup"
>Group</A
> c b</TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "section1"
><A NAME = "2"
> Hetero List</A
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>data</SPAN
> <A NAME = "t%3ALM"
></A
><B
>LM</B
> a b m</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "section4"
>Constructors</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A NAME = "v%3A%3A%3E%3E"
></A
><B
>(:>>)</B
> (m a) (b m)</TD
><TD CLASS = "rdoc"
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "section4"
>Instances</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
>(<A HREF = "Sound.Hommage.Parameter.html#t%3APushFields"
>PushFields</A
> b) => <A HREF = "Sound.Hommage.Parameter.html#t%3APushFields"
>PushFields</A
> (<A HREF = "Sound.Hommage.Parameter.html#t%3ALM"
>LM</A
> a b)</TD
></TR
><TR
><TD CLASS = "decl"
>(<A HREF = "Sound.Hommage.Parameter.html#t%3APushFields"
>PushFields</A
> b', <A HREF = "Sound.Hommage.Parameter.html#t%3AToFields"
>ToFields</A
> b b') => <A HREF = "Sound.Hommage.Parameter.html#t%3AToFields"
>ToFields</A
> (a, b) (<A HREF = "Sound.Hommage.Parameter.html#t%3ALM"
>LM</A
> a b')</TD
></TR
><TR
><TD CLASS = "decl"
>(<A HREF = "Sound.Hommage.Parameter.html#t%3APushGroups"
>PushGroups</A
> b) => <A HREF = "Sound.Hommage.Parameter.html#t%3APushGroups"
>PushGroups</A
> (<A HREF = "Sound.Hommage.Parameter.html#t%3ALM"
>LM</A
> a b)</TD
></TR
><TR
><TD CLASS = "decl"
>(<A HREF = "Sound.Hommage.Parameter.html#t%3AToGroups"
>ToGroups</A
> b b', <A HREF = "Sound.Hommage.Parameter.html#t%3APushGroups"
>PushGroups</A
> b') => <A HREF = "Sound.Hommage.Parameter.html#t%3AToGroups"
>ToGroups</A
> (Either a b) (<A HREF = "Sound.Hommage.Parameter.html#t%3ALM"
>LM</A
> a b')</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>data</SPAN
> <A NAME = "t%3ANilM"
></A
><B
>NilM</B
> m</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "ndoc"
> The correct type is: <TT
> data NilM (m :: * -> *) = NilM </TT
> .
(But Haddock rejects this definition. GHC will need it)</TD
></TR
><TR
><TD CLASS = "section4"
>Constructors</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A NAME = "v%3ANilM"
></A
><B
>NilM</B
></TD
><TD CLASS = "rdoc"
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "section4"
>Instances</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Parameter.html#t%3APushFields"
>PushFields</A
> <A HREF = "Sound.Hommage.Parameter.html#t%3ANilM"
>NilM</A
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Parameter.html#t%3AToFields"
>ToFields</A
> () <A HREF = "Sound.Hommage.Parameter.html#t%3ANilM"
>NilM</A
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Parameter.html#t%3APushGroups"
>PushGroups</A
> <A HREF = "Sound.Hommage.Parameter.html#t%3ANilM"
>NilM</A
></TD
></TR
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Parameter.html#t%3AToGroups"
>ToGroups</A
> () <A HREF = "Sound.Hommage.Parameter.html#t%3ANilM"
>NilM</A
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>class</SPAN
> <A NAME = "t%3APushFields"
></A
><B
>PushFields</B
> m <SPAN CLASS = "keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "section4"
>Methods</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A NAME = "v%3ApushFields"
></A
><B
>pushFields</B
> :: m (<A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> c) -> m (<A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> (x, c))</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "section4"
>Instances</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Parameter.html#t%3APushFields"
>PushFields</A
> <A HREF = "Sound.Hommage.Parameter.html#t%3ANilM"
>NilM</A
></TD
></TR
><TR
><TD CLASS = "decl"
>(<A HREF = "Sound.Hommage.Parameter.html#t%3APushFields"
>PushFields</A
> b) => <A HREF = "Sound.Hommage.Parameter.html#t%3APushFields"
>PushFields</A
> (<A HREF = "Sound.Hommage.Parameter.html#t%3ALM"
>LM</A
> a b)</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>class</SPAN
> <A NAME = "t%3AToFields"
></A
><B
>ToFields</B
> a r <SPAN CLASS = "keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "section4"
>Methods</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A NAME = "v%3AtoFields"
></A
><B
>toFields</B
> :: a -> r (<A HREF = "Sound.Hommage.Parameter.html#t%3AField"
>Field</A
> a)</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "section4"
>Instances</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Parameter.html#t%3AToFields"
>ToFields</A
> () <A HREF = "Sound.Hommage.Parameter.html#t%3ANilM"
>NilM</A
></TD
></TR
><TR
><TD CLASS = "decl"
>(<A HREF = "Sound.Hommage.Parameter.html#t%3APushFields"
>PushFields</A
> b', <A HREF = "Sound.Hommage.Parameter.html#t%3AToFields"
>ToFields</A
> b b') => <A HREF = "Sound.Hommage.Parameter.html#t%3AToFields"
>ToFields</A
> (a, b) (<A HREF = "Sound.Hommage.Parameter.html#t%3ALM"
>LM</A
> a b')</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>class</SPAN
> <A NAME = "t%3APushGroups"
></A
><B
>PushGroups</B
> m <SPAN CLASS = "keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "section4"
>Methods</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A NAME = "v%3ApushGroups"
></A
><B
>pushGroups</B
> :: m (<A HREF = "Sound.Hommage.Parameter.html#t%3AGroup"
>Group</A
> c) -> m (<A HREF = "Sound.Hommage.Parameter.html#t%3AGroup"
>Group</A
> (Either x c))</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "section4"
>Instances</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Parameter.html#t%3APushGroups"
>PushGroups</A
> <A HREF = "Sound.Hommage.Parameter.html#t%3ANilM"
>NilM</A
></TD
></TR
><TR
><TD CLASS = "decl"
>(<A HREF = "Sound.Hommage.Parameter.html#t%3APushGroups"
>PushGroups</A
> b) => <A HREF = "Sound.Hommage.Parameter.html#t%3APushGroups"
>PushGroups</A
> (<A HREF = "Sound.Hommage.Parameter.html#t%3ALM"
>LM</A
> a b)</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "decl"
><SPAN CLASS = "keyword"
>class</SPAN
> <A NAME = "t%3AToGroups"
></A
><B
>ToGroups</B
> a r <SPAN CLASS = "keyword"
>where</SPAN
></TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "section4"
>Methods</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "0" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A NAME = "v%3AtoGroups"
></A
><B
>toGroups</B
> :: a -> r (<A HREF = "Sound.Hommage.Parameter.html#t%3AGroup"
>Group</A
> a)</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s8"
></TD
></TR
><TR
><TD CLASS = "section4"
>Instances</TD
></TR
><TR
><TD CLASS = "body"
><TABLE CLASS = "vanilla" CELLSPACING = "1" CELLPADDING = "0"
><TR
><TD CLASS = "decl"
><A HREF = "Sound.Hommage.Parameter.html#t%3AToGroups"
>ToGroups</A
> () <A HREF = "Sound.Hommage.Parameter.html#t%3ANilM"
>NilM</A
></TD
></TR
><TR
><TD CLASS = "decl"
>(<A HREF = "Sound.Hommage.Parameter.html#t%3AToGroups"
>ToGroups</A
> b b', <A HREF = "Sound.Hommage.Parameter.html#t%3APushGroups"
>PushGroups</A
> b') => <A HREF = "Sound.Hommage.Parameter.html#t%3AToGroups"
>ToGroups</A
> (Either a b) (<A HREF = "Sound.Hommage.Parameter.html#t%3ALM"
>LM</A
> a b')</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS = "s15"
></TD
></TR
><TR
><TD CLASS = "botbar"
>Produced by <A HREF = "http://www.haskell.org/haddock/"
>Haddock</A
> version HADDOCK_VERSION</TD
></TR
></TABLE
></BODY
></HTML
>