問題タブ [lifting]

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.

0 投票する
3 に答える
265 参照

haskell - この無意味なコードを推測する手順は何ですか?

私はいくつかのコードを見直していて、次の宝石に出くわしました。これは、pointfree出力のコピーアンドペーストであると思います:

(私は、以下が通常よりも適切だと思いましたfoo/barこの特定の質問について:P)



(i)coordinates b = (x b, y b)

から

(ii)に単純化するために必要な手順を説明してくれる人は親切でしょうかcoordinates = liftM2 (,) x y? 特に、背景にモナドが潜んでいることにさえ気づいていなかったので

、 の使用については少し混乱しています。liftM2

(i) は次のように表すこともできますがcoordinates s = (,) (x s) (y s)、どこでどのように進めればよいかわかりません。


PS以下は、それがからだと思われる理由ですpointfree(出力はからGHCIであり、:plにエイリアスされていpointfreeます):

0 投票する
1 に答える
428 参照

haskell - 持ち上げてモナド変換スタックの *内部* を固定する

aにIO Intラップされた があり、スタック モナドで使用したいStateT MyState値があるとします。State MyState Intこの内的な意味でそれを持ち上げるにはどうすればよいですか?私はすでに外側のモナドに持ち上げる必要がある内部と互換性のあるものを使用することを知っていますliftliftIO、今は逆の問題があります: 値はすでに外側のモナドにありますが、内側のモナドにはありません。

例えば:

状態を「取得」し、それを runState に手で押し込み、すべてを再度ボックス化する必要がありますか、それともこれを行う一般的な方法はありますか?

StateT MyState IO aところで、その sim パラメータは IO とは何の関係もない一連のステートフル関数であるため、回避できる場合はそれらすべてを返すことに少し気が進まないのです。

0 投票する
2 に答える
755 参照

matlab - ハールリフティングスキーム

リフティング スキーム バージョン haar を画像に適用しようとしています。インターネットに投稿されたコードを使用して適用を開始しました。

実際、上記のコードは、LEVEL1 のリフティング Haar ウェーブレットを適用します。2 レベルまたは 3 レベルのリフティング Haar ウェーブレットを適用するには、このコードをどのように変更すればよいですか?

どんな助けでも大歓迎です!

クリスティーナ

0 投票する
2 に答える
868 参照

haskell - モナドスタックを平坦化

だから私は最初の本格的な haskell プロジェクト全体にこの種のコードを持っています:

私の目標を達成しようとする方法には間違いなく何か問題があるかもしれません (もっと簡単な方法があるかもしれません) が、現在、モナド変換子のスタックをより良い方法で処理する方法を学ぶことに興味があります。rこれは、スタック内のより高いモナドにコンテキストを取得してB持ち上げる方法を見つけた唯一の方法です。最初のステートメントの代わりにブロック全体を持ち上げることは、私が自分でできる限りです。

私がしばしば行き着くのは、深いモナドがliftである場合に回避できることがわかったチェーンです。ただし、他のモナドの一般的な方法については知りません。liftIOIO

そのようなスタックを処理し、あるレベルで 1 つの値を抽出し、別のレベルで別の値を抽出し、これらを組み合わせて 2 つのレベルのいずれかに影響を与えたり、さらに別のレベルに影響を与えたりする必要がある場合に従うことができるパターンはありますか?

ブロック全体を持ち上げたり (letバインドされた変数の範囲を限定したり、内側のブロックに制限したりする)、lift . lift . ... lift個々のアクションを実行することなく、スタックを何らかの方法で操作できますか?

0 投票する
1 に答える
825 参照

haskell - モナドの整理 - モナド変換子のアプリケーションを newtype モナドに変える

私はExceptT a (StateT A M)、いくつかの具象型Aとモナドのために、例えば、を取りM、それらを新しいカスタムモナドにラップしようとしています。

最初にStateT A M、 が他のコンテキストで頻繁に現れることを特定したので、それだけをモナドでラップしてから でラップするのが最善であると判断しM1ましExceptT a M1M2

必要なプロパティは、のインスタンスとのクラスを作成M1するM2ことMonadStateですM(それが呼び出されたと仮定しましょうMyMonadClass)。のインスタンスでもM2ある必要がありますMonadError

まず、単純な型のシノニムから始めました。

次に、最初にインスタンス宣言を(インスタンスを実装せずに)スケッチすると思いましたが、そこで最初に行き詰まりました。instance MonadState A (MyState)正しい構文ではないようです。newtype MyState' a = StateT a M作成してから作成する必要があると思いましたtype MyState = MyState A(必要のない言語拡張機能は使用しないでください)。

しかし、シノニムを宣言に変換し始めると、 and型newtypeへの接続が失われ始めました。StateT A MExceptT ...

すでに実装されているトランスフォーマーは姿を消し、あまり意味のないことをしようとしていると思います。だから私の質問は次のとおりです: この種の動作を新しい複合モナドに正しくラップして、下にあるレイヤーにアクセスできるようにすることで、不必要な持ち上げを回避し、物事を明確に整理することができます。

0 投票する
1 に答える
76 参照

haskell - リフトなどの多態性関数の型制約

だから私はこのコードを持っています

mそして、コンパイラは、 from 署名がlift型であることを証明できない、MonadAまたはそれがこれらの不可解なエラーメッセージの読み方であると不平を言っています。

これに対処する方法はありますか?次のようにインスタンス化できるようにするには、制約が必要だと思います。

また、そのようなf作業の実装はありますか? (上記のエラーのため、そこまで到達しませんでした)。内側のモナドの上fに解決するために右側に願っています。fa


編集newtype MonadA a => MyStateT ...:私が言及した正確なエラーを回避するために、型制約を削除するのに実際に役立ちました。ただし、以前に同じことが原因であると考えていた別のエラーがありました。上記のサンプル コードの続きを考えてみてください (いくつかの部分が繰り返され、現在は型の制約がありません)。

エラーは

の実装でfB。以前、私はclass MonadA m => MonadB m役に立たなかった。aとマッチングしても意味がありませんStateT A m。それMyStateTのインスタンスはMonadState A機能するはずなので、いいえ?

編集

OK、うまくいきました:

愚かな私。

0 投票する
1 に答える
91 参照

haskell - Haskell: リストで動作するように持ち上げることができるような関数を書く

次の2つの機能があります。

noneOnEmptyA1) 機能を達成し、2) 機能を達成するように持ち上げることができる単一の関数を作成することは可能noneOnEmptyBですか? 問題の核心は、空のリストをチェックしnoneOnEmptyAながら空のテキストをチェックすることです。noneOnEmptyBただし、noneOnEmptyAリストを操作するために持ち上げられた ( fmap noneOnEmptyAtype を返す場合のよう[T.Text]に) リスト自体が空であるかどうかをチェックするのではなく、リスト内の空のテキストをチェックします。

0 投票する
3 に答える
1608 参照

haskell - 選択したものを自動的に ExceptT に持ち上げます

私がこの(間違いなく誤解を招く)コードの一部を置いているとしましょう:

ghc次のエラーが表示されます。

を に持ち上げる最も標準的な方法は何EitherですかExceptT? Either Stringのインスタンスなので、何らかの方法があるに違いないと感じていますMonadError

私は自分のリフティング関数を書きました:

しかし、私はすでに ExceptTモナド変換子の内部で作業しているので、これはまだ間違っていると感じています。

ここで何が間違っていますか?コードを別の方法で構成する必要がありますか?

0 投票する
1 に答える
48 参照

haskell - 持ち上げられた「if」関数が予期しない動作をする

私のプログラムif'では、組み込み構造の代わりに、モジュールの 1 つで定義された関数を使用していますif-then-else。それは自明に定義されており、うまく機能します。

ただし、モナド値に適用する必要があるコードの場所が 1 つあります (IO私の場合)。つまり、型シグネチャは のようになりますIO Bool -> IO a -> IO a -> IO a。当然、持ち上げてみました。

しかし、式を評価しようとすると、期待どおりの結果が得られません。

<*>説明に「逐次適用」と書いてあるのは知っているので、そのせいかもしれません。しかし、ここで何が起こっているのでしょうか? まったく新しい専用関数を作成せずに修正できますか?