recursion-schemes

    6

    1答えて

    に空でない構造をフォールディング私は変成を使用して、非空のバラの木のためFoldable.toListを書きたいが、最後の要素を抽出することが不可能だ: import Data.Functor.Foldable data RoseTree a = RoseNode a [RoseTree a] ana5 :: RoseTree a -> [a] ana5 = ana coalg5 c

    1

    2答えて

    を使用するcataを使用すると、結果にASTを折り畳むことができます。 Cofreeを使用すると、ASTに追加の注釈を保存できます。どのようにしてASTを取得し、各ステップで結果とともに注釈付きASTを返すことができますか? alg :: Term Result -> Result alg = undefined run :: Fix Term -> Result run ast = ca

    1

    1答えて

    値がa: Free[Op, A]の場合、aの構造を「平坦化」して、フリーモナドによって結合された2つのOpが1つにまとめられる可能性がありますか? コンテキスト:Opという意味はその操作が冪等であるため、これを解釈前に最適化ステップとして実行したいと思います。したがって、2つが「連続して」表示される場合、2つ目はプログラムのセマンティクスに無償で削除できます。

    2

    1答えて

    数値の素因数分解を見つけるための小さなプログラムを作成しました。 main関数を除いてすべてコンパイルされているように見えますが、Show1インスタンスが見つからないという不満があります。 {-# LANGUAGE DeriveFunctor #-} module FactorAnamorphism where import Data.Functor.Foldable import Da

    1

    1答えて

    次のコードで、cataMはツリートップダウンをトラバースすることは可能です(現在の場合はボトムアップではありません)。 私は違っfoldMapを実装する必要がありますが、branchは子供ではありませんtのインスタンスを持っていないので、子供たちの前branchノード自体をどのように処理するかを推測しますか? module Catatree where import Data.Foldable

    3

    2答えて

    フィボナッチ数のリストのエレガントなderinitionがあります: fibs :: [Integer] fibs = fib 1 1 where fib a b = a : fib b (a + b) それはrecursion-schemesライブラリを使用するように変換することができますか? 私が得ることができる最も近いが完全に異なるアプローチを使用して、次のコードである。必要

    12

    1答えて

    で修正、ムーとニューの違いは何ですか、3つの宣言があります。 newtype Fix f = Fix (f (Fix f)) newtype Mu f = Mu (forall a. (f a -> a) -> a) data Nu f where Nu :: (a -> f a) -> a -> Nu f は、これらの3つのデータ・タイプの違いは何ですか?

    2

    2答えて

    私はHaskellの高次関数について宿題をしており、始めに少し問題があります。 最初の質問について何か助けと説明ができたら、私は残りの部分を終えることができると確信しています。私は私が持っていると思っています、このようなf1 (f2 (*) [1,2,3,4]) 5 ~> [5,10,15,20] f1 = f2 = という機能f1とf2を書き、高階関数(map、fold、またはfilter

    2

    1答えて

    私は現在、抽象構文木を扱い、規則に従って変換する必要がある(具体的なことは重要ではない)サイドプロジェクトについては作業中です。 AST自体は重要ではありません。つまり、一部の種類に限定されたサブ表現があることを意味します。 (例えばオペレータAは唯一のタイプBである引数ではなく、任意のExprを取る必要があり、私のデータ型の大幅簡素化縮小版は、次のようになります。 data Expr = Lis