2016-05-04 5 views
1

質問して申し訳ありませんが、私はちょうど 私の質問は、「不動点コンビネータ」に関連している... Haskellのを勉強し始めています不動点コンビネータのタイプを推測fixそのが<a href="https://en.wikipedia.org/wiki/Fixed-point_combinator#Lazy_functional_implementation" rel="nofollow">this wikipedia page section</a>による</p> <p>...機能を

fix f = f (fix f) 

は型である(あるいは、少なくともタイプのものとすることができる)

(a -> a) -> a 

誰かが私に理由を説明できますか?

ありがとうございます!

また、定義から関数の型を推測する方法を説明するポインタ(Webページ、書籍...)がありますか?定義

fix f = f (fix f) 

から

+0

は、あなたが[この質問](http://stackoverflow.com/questions/8099349/fixed-pointを読みました-combinator-in-haskell) – Guvante

+0

グアバンテありがとう、私はそれを見ましたが、私が理解したところから、私が尋ねたのは正確ではありません...私が欲しいのは、分析的な答えか、そのような問題は... – godot

+0

'fix f'は' f'ではありません。これは 'f(fix f)'です。 – dfeuer

答えて

6

スタートは、それが引数を取るので、fix

fix :: x -> y 

のように見えるタイプを持っている必要がありますそれは何かにその引数を適用するので、実際には

fix :: (p -> q) -> r 

実際には、引数をfix fに適用します、そう

fix :: (r -> q) -> r 

最終結果は、実際に、このアプリケーションの結果であるので、

fix :: (r -> r) -> r