タグ付けされた質問 「haskell」

1
IOモナドは技術的に間違っていますか?
haskell wikiには、IOモナドの条件付き使用の次の例があります(こちらを参照)。 when :: Bool -> IO () -> IO () when condition action world = if condition then action world else ((), world) この例では、の定義はすべてをより理解しやすくするためのものであるIO aことRealWorld -> (a, RealWorld)に注意してください。 このスニペットは、IOモナドで条件付きでアクションを実行します。さて、それconditionがFalseであると仮定すると、アクションactionは決して実行されるべきではありません。遅延セマンティクスを使用すると、これが実際に当てはまります。ただし、ここではHaskellが技術的に厳密ではないことに注意してください。これは、たとえば、コンパイラーがaction world別のスレッドでプリエンプティブに実行することを許可され、後で必要でないことが判明したときにその計算を破棄することを意味します。ただし、その時点までに副作用はすでに発生しています。 さて、プログラム全体が終了したときにのみ副作用が伝播されるようにIOモナドを実装し、どの副作用を実行すべきかを正確に知ることができます。ただし、これはそうではありません。Haskellで無限のプログラムを作成することが可能であるため、明らかに中間の副作用があります。 これは、IOモナドが技術的に間違っていることを意味しますか、またはこれを防ぐ他の何かがありますか?

1
カレーハワードの述語論理への対応?
だから私は頭をカリーハワードに回そうとしている。(私は何度か試してみましたが、ゲル化していない/抽象的すぎるとは思われません)。具体的な問題に取り組むために、私はウィキペディアからリンクされたいくつかのHaskellチュートリアル、特にTim Newshamのチュートリアルに取り組んでいます。Newshamがチュートリアルを投稿したときにも役立つディスカッションがあります。 (しかし、私はNewshamとPiponiのdataラッパーを無視し、基礎となる型について話します。)ヒルベルトの公理スキーム(S、Kコンビネーターとして表されます)があります。タイプとしての命題があります。関数矢印としての意味; および関数アプリケーションとしてのModus Ponens: axK :: p -> q -> p axK = const axS :: (p -> q -> r) -> (p -> q) -> p -> r axS f g x = f x (g x) modPons = ($); infixl 0 `modPons` -- infix Left, cp ($) …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.