15

経験豊富な Haskell プログラマーが実際に型推論を実際にどのくらいの頻度で使用しているかについて、私は興味があります。他の特定の言語で必要とされる常に明示的な宣言よりも優れていると称賛されることがよくありますが、何らかの理由で (おそらく私が初心者だからという理由で)、ほぼ常に型シグネチャを記述することが「正しい」と感じています.. . 場合によっては、本当に必要な場合もあります。

経験豊富な Haskeller (Haskellites? Haskellizers?) から情報を提供してもらえますか?

4

4 に答える 4

5

私は常にトップレベルの関数と値の型シグネチャを記述しますが、"where"、"let"、または "do" 句の内容については記述しません。

まず、トップレベルの関数は通常エクスポートされ、Haddock はドキュメントを生成するために型宣言を必要とします。

第二に、間違いを犯した場合、コンパイラが利用可能な型情報を持っていると、コンパイラ エラーを解読するのがずっと簡単になります。実際、複雑な「where」句で理解できない型エラーが発生することがあるので、一時的な型宣言を追加して問題を見つけます。これは、型レベルでの printf デバッグに相当するものと少し似ています。

元の質問に答えるために、私は型推論をよく使用しますが、100% ではありません。

于 2009-01-21T07:50:38.170 に答える
4

あなたは良い本能を持っています。これらはコンパイラによってチェックされるため、最上位レベルの値の型シグネチャは貴重なドキュメントを提供します。

他の人たちと同じように、私はほとんどの場合、トップレベルの関数に型シグネチャを付けますが、他の宣言にはほとんど付けません。

もう 1 つの場所型推論は非常に重要であり、対話型ループ (たとえば、GHCi を使用) にあります。この手法は、新しい高階関数などを設計してデバッグするときに最も役立ちます。

于 2009-01-22T05:04:28.550 に答える
1

型チェック エラーが発生した場合、Haskell コンパイラはエラーに関する情報を提供しますが、この情報を解読するのは難しい場合があります。簡単にするために、関数の型シグネチャをコメントアウトしてから、コンパイラが型について推測した内容を確認し、目的の型とどのように異なるかを確認できます。

もう 1 つの用途は、トップ レベル関数内に「内部関数」を作成しているが、内部関数の作成方法や、その型がどうあるべきかさえわからない場合です。できることは、内部関数を引数として最上位関数に渡し、ghci に型レベル関数の型を問い合わせることです。これには、内部関数の型が含まれます。その後、Hoogle などのツールを使用して、この関数が既にライブラリに存在するかどうかを確認できます。

于 2009-12-24T23:57:47.670 に答える