リスト、タプルで変数を一気に束縛

Ruby で a,b,c = 123,"Hello",'a' と書くと a,b,c にそれぞれに対応する値が設定される。

irb(main):001:0> a,b,c = 123,"Hello",'a'
=> [123, "Hello", "a"]
irb(main):002:0> a
=> 123
irb(main):003:0> b
=> "Hello"
irb(main):004:0> c
=> "a"

これが Haskell になるともっと凄いことになる。

-- tuple の要素が束縛される。
ghci> let (a,b)=(1,"hello")
ghci> a
1
ghci> b
"hello"
-- tuple がネストしていてもOK。
ghci> let (a,b,(c,d,e))=(1,"hello",("world",234,True))
ghci> e
True
ghci> a
1
ghci> b
"hello"
-- list の要素もそれぞれ束縛される。
ghci> let [a,b]=["hello","world"]
ghci> a
"hello"
ghci> b
"world"
-- list の list も OK。
ghci> let [[a],[b]]=[["hello"],["world"]]
ghci> a
"hello"