質問

なぜこの関数のタイプ(a-> a) - > a?

Prelude> let y f = f (y f)
Prelude> :t y
y :: (t -> t) -> t

それは無限/再帰的なタイプであるべきではありませんか?私はそれがタイプであるべきだと思うことを言葉にしようとするつもりでしたが、何らかの理由でそれをすることはできません。

y :: (t -> t) -> ?WTFIsGoingOnOnTheRHS?

f(yf)が値にどのように解決するかはわかりません。以下は私にもう少し理にかなっています:

Prelude> let y f x = f (y f) x
Prelude> :t y
y :: ((a -> b) -> a -> b) -> a -> b

しかし、それはまだばかげて混乱しています。どうしたの?

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top