小编use*_*596的帖子

有没有办法构建物化镜头?

我试图使用镜头库来解决以下问题:

给定树的列表版本,创建一棵树。例子:

Given:
  [1,2,3,4,5,6,7]

I should make a tree:
     1
   2   3
  4 5 6 7
Run Code Online (Sandbox Code Playgroud)

我的解决方案是使用状态单子和透镜根据深度创建节点。

我的树数据类型:

data Tree a = Nil | Node a (Tree a) (Tree a) deriving (Show)
Run Code Online (Sandbox Code Playgroud)

我想要的一个字符串版本,用于计算镜片:

calculateSetters 1 = ["_Node . _2", "_Node . _3"]
calculateSetters n = (++) <$> calculateSetters (n-1) <*> [ "_Node . _2", "_Node . _3" ]

-- where "_Node" is a prism and "_2" and "_3" are lenses
Run Code Online (Sandbox Code Playgroud)

非拉丝版本会将所有镜头输出到给定深度的空孩子,我可以使用 进行设置.~。非字符串版本的要点如下:

calculateSetters n = Setter <$> combinations …
Run Code Online (Sandbox Code Playgroud)

haskell haskell-lens

6
推荐指数
1
解决办法
82
查看次数

标签 统计

haskell ×1

haskell-lens ×1