2016-10-16 16 views
-1

Haskellはケース1で2つの関数呼び出しを順番に実行できますが、以下のケース2で混乱します。なぜですか?Haskellで実行シーケンスを調べる方法は?

ghci> id id 1 -- case 1 

ghci> (+1) id 1 -- case 2 
+0

2番目のケースで出力がどのようになると思いますか? – gigabytes

答えて

7

機能アプリケーションは、左結合され、あなたの例のように解析されることを意味する:

(id id) 1 
((+1) id) 1 

前者は従って減少:

(id id) 1 
id 1 
1 

後者はです。TypeCheckありません。 (+1)のタイプはNum n => n -> nですが、idのタイプはa -> aで、数値ではありません。

(+1) (id 1)を意味する場合は、括弧で括らなければなりません。

+1

'(id + 1)1'と書くと、2番目の式がなぜ機能しないのかは、はっきりしているでしょう。 – leftaroundabout

+0

ありがとうございます。ポイントは、 '(id id)'がタイプチェックであるということです。ハスケルに存在する他のタイプレス関数はありますか? – sof

+0

@ idの中にはタイプがありません。すべてがタイプを持っています。 'id'の型は' a - > a'です。式 'id id'では'(a - > a) - >(a - > a) 'の最初の' id'が使用されています ' –

関連する問題