by shigemk2

当面は技術的なことしか書かない

タプルの3番目

そのままなぞっただけです。タプルの要素取得にはfstとsndがありますが、trdに相当するものはない、というお話。そもそも、要素数3つ以上のタプルでfstとかsndとかするとエラーになります。

f:id:shigemk2:20150103110914p:plain

で、要素数が3以上のタプルから要素を取り出すには独自関数を作成するしかないようです。

get.hs

ぐだぐだ Haskell

f:id:shigemk2:20150103110611p:plain

問題があるとするなら、こういうことをするくらいならタプルを使わずにリストを使うべきではなかろうかということでしょうか。

Scala vs Haskell リストの型

f:id:shigemk2:20150103214424p:plain

f:id:shigemk2:20150103214442p:plain

Scala

複数のデータ型を有するリストを作成することも可能。

scala> val a = List(1, 2)
a: List[Int] = List(1, 2)

scala> val a = List(1, "hoge")
a: List[Any] = List(1, hoge)

Haskell

https://www.shido.info/hs/haskell4.html#list

リストの要素の型はすべて同じ必要がある。

Prelude> let a = [1,2]
Prelude> a
[1,2]
Prelude> :t a
a :: [Integer]
Prelude> let a = [1,"hoge"]

<interactive>:7:10:
    No instance for (Num [Char]) arising from the literal `1'
    Possible fix: add an instance declaration for (Num [Char])
    In the expression: 1
    In the expression: [1, "hoge"]
    In an equation for `a': a = [1, "hoge"]