相关疑难解决方法(0)

如何枚举Haskell中的递归数据类型?

这篇博文有一个有趣的解释,说明如何使用Omega monad对角枚举任意语法.他提供了一个如何操作的示例,从而产生无限的字符串序列.我想做同样的事情,除了生成一个实际数据类型列表,而不是生成字符串列表.例如,

 data T = A | B T | C T T
Run Code Online (Sandbox Code Playgroud)

会生成

A, B A, C A A, C (B A) A... 
Run Code Online (Sandbox Code Playgroud)

或类似的东西.不幸的是,我的Haskell技能仍在成熟,经过几个小时的演奏后,我无法做到我想要的.怎么办?

根据要求,我的一次尝试(我尝试了太多东西......):

import Control.Monad.Omega

data T = A | B T | C T T deriving (Show)

a = [A] 
        ++ (do { x <- each a; return (B x) })
        ++ (do { x <- each a; y <- each a; return (C x y) })

main = print $ take 10 $ a
Run Code Online (Sandbox Code Playgroud)

monads grammar haskell functional-programming

11
推荐指数
2
解决办法
735
查看次数

标签 统计

functional-programming ×1

grammar ×1

haskell ×1

monads ×1