問題タブ [maybe]
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.
haskell - Haskellの「Maybe」を使用して、型宣言[初心者の質問]
Haskellの実験を始めましたが、問題があります。qqqは、「Nothing」で呼び出された場合は1つの文字列を出力し、「Justsomething」で呼び出された場合は他の文字列を出力する関数です。
最初の試みはうまくいったようです:
だが:
- 失敗させようとする
main = qqq (Nothing)
と(「制約内のあいまいな型変数 `a0':(a0を表示)'qqq'の使用から生じる") - 失敗した場合に型署名を追加したい場合:
qqq :: Maybe x => x -> IO ()
->Type constructor 'Maybe' used as a class
->でも、そうではありませんか?
qqq :: (Maybe x) -> IO ()
。これで、署名自体が成功したように見えます。しかし、場合のようにmain = qqq (Just 43)
その不思議な(Show a0)
エラーで失敗し始めますmain = qqq (Nothing)
。
質問:
- でqqqを呼び出すこと
Nothing
が、で呼び出すのと非常に異なるのはなぜJust 43
ですか? - 何
(Show a0)
ですか?エラーメッセージでのみ言及されています。これを使用しようとすると、「スコープ内に表示されない」などの結果になります。 - このための正しい型署名とは何ですか?Haskellの型注釈を推測する方法は?次のようなものを期待しています:
haskell - このコードを書くためのより短い方法
次のパターンは、Haskellコードで非常に頻繁に表示されます。それを書くためのより短い方法はありますか?
functional-programming - 関数は「Nothing」ではなく「No Solution」を返します
述語ロジックの式を表す標準データ型があります。論理和の自然演繹消去規則を表す関数は、次のようになります。
統合が失敗したときに Nothing と評価する代わりに、関数は に解を返しませんPACKS
。
何が欠けているのですか?統合が失敗したときにel
評価されないのはなぜですか?Nothing
c# - iSynaptic.Commonsと多分モナド
私は、値リトリーバーが例外をスローする可能性があるコンテキストで、iSynaptic.CommonsでMaybeモナドをどのように使用できるかを理解しようとしてきました。
例えば:
これは多分それがそこにある実装で可能ですか?
haskell - ハスケル初心者
GHCi から次の応答が返される理由がわかりません。Maybe
コンストラクタ関数ではありませんか?
c# - Maybe モナドは短絡回路としてどのように機能しますか?
モナドをより深く理解しようとしています。そのため、私は Maybe モナドを少し掘り下げ始めました。
私が正しくないように見えることが1つあります。これを読む:
「したがって、Maybe Bind は短絡回路として機能します。操作のチェーンで、いずれかが Nothing を返す場合、評価は中止され、チェーン全体から Nothing が返されます。」
から: http://mikehadlow.blogspot.com/2011/01/monads-in-c-5-maybe.html
この:
「Maybe<T>
タイプの場合、バインディングは単純なルールに従って実装されます。チェーンがある時点で空の値を返す場合、チェーンのそれ以降のステップは無視され、代わりに空の値が返されます」
From: 「C# での関数型プログラミング」http://www.amazon.com/Functional-Programming-Techniques-Projects-Programmer/dp/0470744588/
では、コードを見てみましょう。ここに私の多分モナドがあります:
そして、これがモナドを使った私のサンプルコードです:
ノード ツリーを可能な限り深く掘り下げようとしていることは明らかです。しかし、私が言及した引用によると、それがどのように機能しているかはわかりません。つまり、もちろん、null チェックを除外して、例が機能することを意味します。ただし、チェーンを早期に切断することはありません。Bind()
ブレークポイントを設定すると、最後の操作の値なしですべての操作が使用されることがわかります。しかし、20 レベル深く掘り下げて、実際には 3 レベルしか下がらない場合でも、20 レベルをチェックするのでしょうか、それとも間違っているのでしょうか?
これを非モナドアプローチと比較してください:
これこそがショートサーキットと言うべきものではないでしょうか。この場合、if は最初の値が null であるレベルで実際に中断するためです。
これを明確にするのを手伝ってくれる人はいますか?
アップデート
Patrik が指摘したように、3 つのレベルしかなく、20 レベルの深さにしようとしても、各バインドが呼び出されるのは事実です。ただし、Bind() 呼び出しに提供される実際の式は評価されません。この例を編集して、効果を明確にすることができます。
haskell - IOで多分値を抽出する
次の場合:
ghciは私に
もちろん、fromMaybeは正しく機能しています。
しかし、IO操作が実行されてから破棄されているようです。
なぜこうなった?IOモナドを怠惰にする方法はありますか?
具体的にはvalue :: IO (Maybe a)
、(クリーンで簡潔な)言い方を考えると
結果を解凍するか、それに応じてIOErrorをスローしますか?
haskell - Haskell での Just のマージ/追加
Just [1]
go fromとJust [2]
toである、Haskell で盲目的に明白でなければならないことを実行しようとしていJust [1, 2]
ます。しかし、関連しているが役に立たないページを見つけ続けているため、オンラインで何も見つけることができません。それで、どうやってこれを達成しますか?
java - Scalaにアクセスします。Javaからなし
scala.None
Javaからどのようにアクセスできますか?
最後の行により、コンパイラーは「typescala.Noneはパラメーターを取りません」で終了します。
これは「シンボルコンストラクターNone()が見つかりません」で失敗します。
これは「シンボル変数Noneが見つかりません」で失敗します。
2007年にはこれは機能していましたが、その後Scalaが変更されました。Javaコンパイラは以下を提供しますerror: incompatible types
: