だから、私は複数の定義(警備員)との機能を持っている、そして、私はそれを持っているのいずれか返すようにしよう(、b)またはてるそれが一致するものに応じて、[ (a、b)]しかし、コンパイラはエラーを投げているので、それらは異なる型です。私はこれを解決するためにどちらかを使用しようとしていましたが、恐らくそれを正しく使用していませんでした。どんな助け?それはあなたの関数は、いずれかのタイプ(a、b)は、[(a.b)]を返す必要がありますので、どちらかがあなたのために動作しますので、Haskellでは異なる型を返す関数を取得する方法
答えて
Either
- またはそれと同等のカスタムデータ型が - だけですこれを行う方法。 、あなたの問題について何も知らない、
foo n = case stuff n of
Left (a,b) -> ...
Right pairs -> ...
しかし中:誰かがこの関数を呼び出すときに、彼らはパターンマッチは、それが返される2種類のどちらを見つけるためにすることができます
stuff :: Int -> Either (Int,Int) [(Int,Int)]
stuff 0 = Left (0, 0)
stuff n = Right [ (x,x) | x <- [0..n] ]
:ここではダム例です一般的に私はあなたの機能の意味についてもう少し考えることをお勧めします。それは何を取りますか、それは何を返しますか?正確で、数学的である。答えが簡単になればなるほど、この関数はプログラムの残りの部分とHaskellの概念とでよりスムーズに機能します。私の場合、このような記述では、Either
がめったに起きません。どのようにして2つの結果を統合できますか?関数に意味がある場合は、Left (a,b)
の代わりにシングルトンリスト[(a,b)]
を返してください。
Haskellはあまりにもスマートにしようとする機能、あなたはPythonやjQueryのからに使用することができるタイプとうまく再生されません。それをダムで正確に保ちましょう。から複雑さを得て、これらの単純な部分を構成します。これについて興味がある場合は、問題の詳細、達成しようとしていること、それがなぜそのように働くのを望むのかについて、別の質問をしてください。警備員は、実行時に一致している一方で、関数の戻り値の型は、コンパイル時に知らなければならないので、あなたが直接それを行うことはできません
は私たちが型システムのするプロパティが*保存*のことであることを追加してみましょう:私たちはタイプ 'のものを持っていた場合には大まかに言えば、::のInt - >(INT、INT) '' stuff 7'への呼び出しは '[(x、x)| '[(Int、Int)]'型の例では、x < - [0..n] 'です。これは 'stuff'の宣言された戻り値の型とは異なり、したがって型は保持されません。タイプシステムを何かのために信頼しなければならない場合、この不一致を排除する必要があります。したがって、型チェッカーは私たちのプログラムを不正な型として拒否します。 –
機能は、一種類のみを返すことができます。
私はあなたがいずれかを使用しているかと間違っていたが、ここでその使い方の簡単な例であることを確認していない:
test a b =
if a == True
then Left (a,b)
else Right [(a,b)]
はそうここに私の機能は今です:のhttp://paste.pocoo http://paste.pocoo.org/show/325090/ ここでエラーです。 org/show/325093/ –
@Chris 'Right lgst i'は' Right(lgst i) 'でなければなりません。 – dave4420
okですので、http://paste.pocoo.org/show/325143/は動作しますが、後者の2人のガードはhttp://paste.pocoo.org/show/325144/のように見える必要があります。http: /paste.pocoo.org/show/325145/ –
- 1. 異なるプリミティブ型の入力行を取得する方法
- 2. 関数の戻り値の型を取得する方法
- 3. typescript関数で2つの異なる型を返すベストプラクティス?
- 4. 異なる変数値を取得する関数
- 5. ディレクトリサイズを取得する方法が異なる結果を返す
- 6. ジェネリック型引数を取得する適切な方法
- 7. Spring MVC:ResponseEntity本体で異なる型を返す方法
- 8. ベクトルを返す関数からベクトル値を取得する方法は?
- 9. 多型関係を取得する方法とモデル構造体を取得する方法
- 10. TypeScriptで関数の暗黙の型指定を取得する方法は?
- 11. クラスの型を取得して汎用関数で使用する方法は?
- 12. enum入力に基づいて異なる型を返す汎用関数
- 13. F#:1つの関数から異なる型の値を返す
- 14. 迅速なUIWebViewでjavascript関数を取得する方法は?
- 15. JS関数から動的な値を取得する方法
- 16. Crystal Reports VS2010の異なるページで異なるイメージを取得する方法
- 17. 異なる要素の異なる親クラスを取得する方法
- 18. C++ RNG:異なるプロセッサで異なるrandジェネレータを取得する方法は?
- 19. Swiftで異なるデータ型を取得して設定する
- 20. 異なる引数型の関数をPHPで呼び出す
- 21. 異なるクラス型のメンバー関数に変数を指す
- 22. 異なる値を持つ列名を取得する方法
- 23. オブジェクトの関数演算子の引数型を取得する
- 24. 関数の引数型を取得する
- 25. スイフトで変数の型を取得する方法
- 26. 変数の型を取得する方法
- 27. オブジェクト型環境変数を取得する方法は?
- 28. 文字列の実数型を取得する方法は?
- 29. 返信後にjavascript関数でhttp応答を取得する方法
- 30. 関数内に異なるクラス型のインスタンスを作成する
:-)説教のために申し訳ありません。 本当に別のタイプを返そうとしていますか?あなたが2つのケースを区別するために結果にパターンマッチするつもりなら、いずれかが問題ありません。または、シングルトンリストが最初のケースで実行するかどうか?あなたは何をしようとしているのかについてもっと詳しく説明できますか? – b0fh
http://paste.pocoo.org/show/325066/これまでの私の関数 –
は、魔法の呪文を読むようなものです。それはどういう意味ですか? – luqui