2017-07-18 1 views
1

一つは、機能を定義している明確ではない入力します。Haskellは次のように私がしようとしています演習の

twice f x = f (f x) 

を私は二度のタイプを印刷するとき、私は以下を参照してください。私は理解して

Main> :t twice 
twice :: (a -> a) -> a -> a 

わかりませんここに出力します。したがって、twiceはタイプ関数(タイプa -> a)の入力を受け取ります。これは正しいです?その場合、fはどのように機能(a -> a)のタイプであると評価されましたか?そして返品のタイプはtwiceここには何ですか?

答えて

4
twice f   x = f (f x) 
twice :: (a -> a) -> a -> a 

このようです。

ff (f x)タイプaであり、xはタイプaであり、タイプa -> aです。

あなたははい、それは正しいです、このような* 2

+0

ああ:私たちはこれを与え

。だから、どのように 'f'の型がa-> a型であると評価されましたか。通訳者はそれをどのように推論しましたか?私はどこにでも 'f'を定義していない。 – patronus

+1

誰かが似たような質問をしているようです:https://stackoverflow.com/questions/42243902/haskell-function-type-clarification?rq=1 – patronus

1

として、fa -> aとしての機能を渡す必要があります。

fは、aの種類があり、再度彼の出力を使用することができるはずxを要するので、出力が入力と同じ型でなければならないa -> a

のタイプを有しています。

twiceの出力タイプは、fのコールと同じです(a)。私は今、それを参照してください

twice :: (a -> a) -> a -> a 
twice  f   x = f (f x) 
関連する問題