data Suit = Spades | Hearts | Diamonds | Clubs data Rank = Numeric Int | Jack | Queen | King | Ace data Card = Card Rank Suit type Hand = [Card]
data Card = Card Rank Suit
Card
Rank -> Suit -> Card
example_card :: Card example_card = Card Ace Spades
Card
Rank
Suit
Ace
Spades
data Card = Card Rank Suit rank :: Card -> Rank rank (Card rank suit) = rank suit :: Card -> Suit suit (Card rank suit) = suit
data Card = Card {rank::Rank, suit::Suit}
colour :: Suit -> Colour colour Spades = Black colour Clubs = Black colour _ = Red rank :: Card -> Rank rank (Card r s) = r
-Wincomple-patterns
).
[]
[3]
["Haskell","JavaScript","C","Python"]
[1,2,3] /= [3,2,1]
[1,3,True,"Python"]
[Integer]
[String]
[[Integer]]
type String = [Char]
type
keyword introduces a
type synonym, i.e. another name for an existing type.
"Haskell" == ['H','a','s','k','e','l','l']
null :: [a] -> Bool length :: [a] -> Int concat :: [[a]] -> [a] reverse :: [a] -> [a] (++) :: [a] -> [a] -> [a] take :: Int -> [a] -> [a] zip :: [a] -> [b] -> [(a,b)]
and, or :: [Bool] -> Bool words, lines :: String -> [String] unwords, unlines :: [String] -> String
sum, product :: Num a => [a] -> a elem :: Eq a => a -> [a] -> Bool sort :: Ord a => [a] -> [a]
sort
import Data.List