gpt4 book ai didi

haskell - 使用 Control.Lens 中的多个 Getter 调用函数的干净方法是什么?

转载 作者:行者123 更新时间:2023-12-04 17:20:15 25 4
gpt4 key购买 nike

给定一些定义了镜头的数据结构,例如:

import Control.Lens

data Thing =
Thing {
_a :: String
, _b :: String
, _c :: Int
, _d :: Int
}

makeLenses ''Thing

并给出一些我想使用多个 getter 调用的函数,例如:
fun :: Int -> String -> Int -> String -> Bool
fun = undefined

目前,我最终得到了很多丑陋的括号来访问每个字段,例如:
thing = Thing "hello" "there" 5 1

answer = fun (thing^.c) (thing^.a) (thing^.d) (thing^.b)

鉴于 lens 的简洁性在大多数其他情况下,我希望有一些更优雅的东西,但我找不到任何可以帮助这种特定情况的组合器。

最佳答案

由于任何镜头都可以用于查看或设置“模式”,我们至少需要指定 view X对于每个镜头 X。但对于任何镜头 l :: Lens' a b , view l有一个类似 a -> b 的类型如果你翻译了一些 MonadReader噪音。

因此,我们可以使用 Applicative 消除一些重复。 ((->) a) 的实例.

thing & fun <$> view c <*> view a <*> view d <*> view b

关于haskell - 使用 Control.Lens 中的多个 Getter 调用函数的干净方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17771710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com