continuations

    0

    1答えて

    スプレーの指示がcontinuation passing style (CPS)にどのように対応しているかわかりません。 具体的には、継続は(ハスケルで)(a -> r) -> rであるが、このタイプ((a -> r) -> r)(Route->Routetype Route = RequestContext => Unitのタイプを持っている)、スプレーdirectivesを使用しているどこで見

    0

    1答えて

    私は継続をキャプチャして、それを数回再開できるようにしています。そのようなそれぞれの呼び出しは他と独立しています。 たとえば、次のコードでは、私は出力をもたらすためにrun方法でcontext.resumeContinuationへの2つの呼び出しをしたいと思います:1 1、というよりも1 2の電流出力を。 私が理解する限り、結果として得られる出力の理由は、常に同じscopeオブジェクトを使用する

    6

    1答えて

    私は小さなインタプリタを書く必要があるプロジェクトに取り組んでいます。命令は単純なツリー構造を持ち、コマンドの1つは実行を中止する効果があります。下の例では、 "baz"は決して印刷されません。 import Control.Monad.Cont data Instruction = Print String | Halt | Block [Instruction] deriving

    3

    1答えて

    複数のタスクのいずれかが失敗した場合は、再起動しようとしています。 Im HandleException(t)メソッドがexcistingタスクの配列内のタスクを見つけ、その代わりに新しいタスクを作成する.ContinueWith(t => { HandleException(t); }, TaskContinuationOptions.OnlyOnFaulted);を使用しています。私のHand

    5

    1答えて

    私はContのモナドトリックで、hereと記載されており、this SO questionに入っています。 この機能を使用すると、違ったことを行うことができるようにパラメータを取って、あなたが以前の計算での「バックジャンプ」することができます: import Control.Monad.Cont import Control.Monad.State.Strict import Control.

    3

    1答えて

    私はstillを2-3本の指の木を実装しようとしており、私は良い進歩を遂げました(repository)。いくつかのベンチマークを行っているうちに、か​​なり基本的なものがtoListという結果がStackOverflowExceptionであることが判明しました。最初は簡単な修正を見て、それをtail-recursiveにしました。 は残念ながら、それはtoListが犯人ではなかったがviewr

    6

    1答えて

    は私が継続上つもりだと私は構造化継続タイプに2つの異なるアプローチに遭遇しました:私は後者のアプローチはdoesnのことを理解し type C r a = (a -> r) -> r exampleFunction :: String -> C Bool String exampleFunction s = \t -> if length s > 10 then t s else False

    0

    2答えて

    私は(簡単のためにモナドを使用して回避)非常に単純な継続機能を持っている::基本的に data C a = C {unwrap :: (a -> a) -> a} 、私は、入力タイプに基づいて異なる実装を実行する(sudoのコード)に似た何かをしようとしています data Gadt a where AString :: String -> Gadt Bool AInt ::

    5

    1答えて

    私はこれに続く続きを一般的に理解しようとしています。tutorial。 しかし、私は困難がセクション2.10で次の例を理解するために持っています: # let get() = shift (fun k -> fun state -> k state state) ;; get : unit => ’a = <fun> state私は考えタイプintです。私が得ないのは、kのタイプで

    2

    1答えて

    なぜ「DIV/0」が最初に印刷され、「2」秒後に印刷されるのですか? let printZero = printfn "DIV/0" let printSuccess x = printfn "%d" x let div ifZero success x y = if y = 0 then ifZero else x/y |> success let pri