2017-09-13 11 views
1

stdlibにあるData.Maybe.Baseを参照 - すべてMaybeAny、およびAllにはjustのコンストラクタがあります。クラッシュするコンストラクタ名の曖昧さを解消する方法

Agdaはこれらの定義を許可します。どちらを使用するかをどのように指定できますか?

+0

タイプ推論。 'just'関数の1つを呼び出すと、その結果を使用する場所に基づいて、どのような結果が必要なのかを調べようとします。それでもあいまいな場合は、エラーが発生し、明示的な型宣言をどこかに追加する必要があります。うまくいけば、戦略的な場所にあるほうが、残りの部分ははっきりと分かりやすくなります(ただし、明示的な型宣言は、ドキュメントのみの場合は常に良いスタイルです)。 – Thilo

答えて

5

各データ型には独自のモジュールが付属しています。したがって、Maybe,AllおよびAnyは、すべてタイプコンストラクタおよびモジュールです。したがって、Maybe.justAll.justまたはAny.justと書いて、コンストラクタを明確にすることができます。あるいは、型推論(統一がより適切な用語です)または明示的な型シグニチャ(具体的にはThiloなど)によって明確にすることができます。 (しかし、あまりにもあいまいさがあるなら、あなたはエラーが出ます - あなたは未解決のメタを取得します)。

+0

もしあなたが技術を手に入れたいのであれば、最良の言葉はおそらく、タイプがあるので、タイプ*チェック*モードになっているときに可能な「タイプ指向の曖昧さ回避」のようなものでしょう。その型では、コンストラクタがどのデータ型に対応しているかははっきりしています。 – gallais

+0

@gallais、あなたは統一によってそのタイプを得ることができます。私。もし 'fをちょうどf(fromMaybe 0(f 0))'のようにしておけば、推論モードであっても両方の 'f'は曖昧さがなくなります。しかし、はい、このようなことの正しい言葉は、タイプ指向の名前解決です。 – user3237465

+0

あなたは本当に正しいです。 – gallais

関連する問題