問題タブ [either]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - どちらかを使用してScalaコードの失敗を処理する
Option
モナドは、Scalaで何かまたは何もないことに対処するための優れた表現方法です。しかし、「何も起こらない」ときにメッセージをログに記録する必要がある場合はどうなるでしょうか。Scala APIのドキュメントによると、
どちらかのタイプは、scala.Optionの代わりによく使用されます。ここで、Leftは(慣例により)失敗を表し、RightはSomeに似ています。
ただし、Eitherを使用したベストプラクティス、または処理の失敗にEitherを含む実際の良い例を見つけることができませんでした。最後に、自分のプロジェクト用に次のコードを考え出しました。
(これは実際のプロジェクトからのスニペットであるため、それ自体ではコンパイルされないことに注意してください)
Either
コードでどのように使用されているか、および/または上記のコードをリファクタリングするためのより良いアイデアを知っていただければ幸いです。
haskell - このEither-monadコードがタイプチェックを行わないのはなぜですか?
'baby.hs'のこのコードフラグメントは、ひどいコンパイルエラーを引き起こしました:
なぜこれが起こるのですか?そして、どうすればこのコードをコンパイルできますか?助けてくれてありがとう〜
分かりました。そして私はそれがコンパイルされるのを見るためにコードを調整しました:
正常にコンパイルされます!しかし...さらに質問があります:
'どちらか'をモナドにし、' return =Right'を取得しました...どうすれば'return= Left'を取得できますか?私はこれを試しましたが失敗しました:
または:インスタンスモナド(\ x->いずれかのxa)
まったくコンパイルされません!
scala - 返品の処理方法
スカラ関数が
返された結果を処理する正しい方法は何ですか?
val a = A()
と ?
haskell - 標準の(どちらか)モナドインスタンスはありませんか?
どこかにどちらかのインスタンスがあるような印象を受けましたが、見つからないようです。示されているように、Control.Monad、Control.Monad.Instances、およびData.Eitherをインポートしようとしました
しかし、ghcはそれが推論できなかったと私に言います(モナド(どちらか))。追加する
コードをコンパイルしますが、このインスタンス宣言は非常に一般的であるため、標準モジュールにまだ存在していない場合は意味がありません。もしそうなら、どこでそれを見つけるべきですか、そうでなければ、これには理由がありますか?
- - - - - - - 編集 - - - - - - - -
以下のuser31708による回答(「ベース4.6の時点では、インスタンスはData.Either自体にあります。」)が現在正しい回答であると私が考えていることに注意してください。この場合、選択された回答が質問された時点で正解であった場合、選択された回答を再割り当てする適切なプロトコルがわからないため、そのままにしておきます。これに関する別のガイドラインがある場合は、私を訂正してください。
haskell - どちらがFunctorのインスタンスであるかを理解する
余暇にはHaskellを学んでいるので、これは初心者の質問です。
Either a
私の読書で、私はどのようにインスタンスが作成されるかを示す例に出くわしましたFunctor
:
ここで、値コンストラクターの場合に実装がマップされる理由を理解しようとしていますが、 ?Right
の場合はマップされません。Left
これが私の理解です:
まず、上記のインスタンスを次のように書き直します
今:
そんなこと知ってる
fmap :: (c -> d) -> f c -> f d
で代用
f
するEither a
とfmap :: (c -> d) -> Either a c -> Either a d
のタイプ
Right (g x)
はEither a (g x)
であり、のタイプg x
はd
であるため、のタイプはでRight (g x)
ある必要がありますEither a d
。これは、私たちが期待するものですfmap
(上記の2を参照)。ここで
Left (g x)
、同じ理由を使用して、そのタイプがEither (g x) b
、つまりEither d b
、期待するものではないことを示すことができfmap
ます(上記の2を参照)。d
これは、最初のパラメーターではなく、2番目のパラメーターである必要があります。したがって、にマップすることはできませんLeft
。
私の推論は正しいですか?
scala - Scala - コンパクトにするためにタイプを定義するか、読みやすくするために明示的に記述しますか?
Scala では、次のことができます。
また
前者は結果の型についてより明示的であるため、読みやすくなっていますが、異なる実装では、Either[...] を何度も再入力する必要があります。これは後者で解決されますが、読者は一見しただけでは結果について多くの結論を下すことができません。
戻り値の型がOption
の代わりである場合、Either
当然、以前のバージョンに固執します。多くの型パラメーターを持つより複雑な型の場合、2 番目の方がより有益です。Either
ミッドフィールドのどこかにいます。
私の直感では、長期的には後者の方が維持しやすいということです。どう思いますか?これに関する慣行はありますか?
haskell - Haskellで「Either」を使用する
タイプの2つの値とがt1
あります。-valueは、エラー処理に使用されます。これらの値は、を返す関数で使用されます。t2
Either String Type
Left
Either String Type
私がやりたいのは、とが両方とも-valuesであり、を満たすかどうかを確認t1
するt2
ことRight
ですp :: Type -> Bool
。もしそうなら、私は戻りたいですRight (the type inside t1)
。t1
とが両方ともt2
-valuesRight
であるが、を満たさない場合はp
、を返しLeft someString
ます。またはが値のt1
場合t2
、Left
その値を渡したいだけです。
どうすればエレガントな方法でこれを行うことができますか?どちらかをモナドとして使用するのが正しいことだと思いますが、どうすればよいかわかりません。
scala - どちらかのリストをどちらかのリストに変える最良の方法は?
私は以下のようないくつかのコードを持っています、そこで私はどちらかのリストを持っています、そして私はそれをどちらかのリストに変えたいです...特に(この場合)、リストに左があれば、私は戻りますそれらのリストの左側、そうでない場合は権利のリストの右側を返します。
電話get
をかけると、何かが足りないような気がします。
これを行うためのより慣用的な方法はありますか?
haskell - Data.Either を実装しようとしています
Applicative FunctorとEither
Functor を学ぶために、 が型クラス と でどのように実装されているかを見るのはとても楽しいと思いました。もちろん、先に進んでコードを読むこともできますが、物事をよりよく理解するために、自分で物事を実装してみる方が便利だと思います。Functor
Applicative
参考までに、このプレゼンテーションの結果の Haskell バージョンを実装しようとしていますhttp://applicative-errors-scala.googlecode.com/svn/artifacts/0.6/chunk-html/index.html
とにかく、これは私がこれまで持っているものです
しかし、これを実行しようとするたびにghci
、次のエラーメッセージが表示されます: -
これがなぜなのかよくわかりません。誰か助けてもらえますか?
haskell - どちらが左(または右)であるかを尋ねることはできますか?
通常はパターン マッチだけでよいことはわかっていますが、次の関数が役立つ場合もあります。
標準ライブラリにそのようなものはありますか?