Personal tools

List notation

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
(operator section)
(see also as section)
Line 44: Line 44:
   
   
See also:
+
== See also ==
  +
 
* [http://www.haskell.org/pipermail/haskell-cafe/2006-July/016655.html Haskell-Cafe thread: Comma in the front]
 
* [http://www.haskell.org/pipermail/haskell-cafe/2006-July/016655.html Haskell-Cafe thread: Comma in the front]
   

Revision as of 17:10, 4 November 2008

We are used to the list notation
[0,1,2,3]
. However it is syntactic sugar for
(0:1:2:3:[])
.

By using the syntactic sugar, we often miss the benefits of the direct notation.

0 :
1 :
2 :
3 :
[]
Thus it is more theoretically sound and easier to edit.
  • You can easily mix elements and lists into a list by appending the corresponding operator in each line:
[1,2,3] ++
4 :
listA ++
5 :
listB ++
[]
  • You can insert elements or sub-lists conditionally.
infixr 5 ?:, ?++
 
(?:) :: (Bool, a) -> [a] -> [a]
(?:) (b, x) = if b then (x:) else id
 
(?++) :: (Bool, [a]) -> [a] -> [a]
(?++) (b, x) = if b then (x++) else id
 
list =
   [2,3] ++
   (x==5, 5) ?:
   (x==7, listA) ?++
   []
  • You can construct a singleton list with a section of the colon operator:
    (:[]) :: a -> [a]
    .
  • You can prepend an element to a list:
    (x:) :: [a] -> [a]
    . E.g.
    iterate (' ':) []
    creates a list of blank strings with increasing size very efficiently.


See also