静的な型付けを行う言語において、関数の制約を表現する方向性は二つあります。
一つは戻り値で制約を表現する方向
def max[A: Ordering](list: List[A]): Option[A]
もう一つは引数で制約を表現する方向
def max[A: Ordering](list: NonEmptyList[A]): A
このセッションでは、それぞれの違いについて認識するための型の Cardinality という概念を紹介します。
また、具体のシステムにおいてそれぞれの選択がどういった影響を及ぼすかを紹介し、普段のプログラミングにおいてどういったケースでどちらを選択したらよいかの指針を示します。