gpt4 book ai didi

haskell - "compose"怎么是iso的?

转载 作者:行者123 更新时间:2023-12-01 16:53:41 25 4
gpt4 key购买 nike

这是我的类型:

newtype SaneDate = SaneDate UniversalTime
deriving (Show, Eq, Typeable, Generic)
makeWrapped ''SaneDate

现在我需要一个这种类型的 iso:

reprBuild :: Iso' (Maybe UniversalTime) (Fist SaneDate)

我这样做了:

reprBuild = iso
(\ t -> First (SaneDate <$> t) )
(\ sane_first -> fmap (^. _Wrapped) $ getFirst sane_first )

但我觉得我工作非常努力。是否有一种(更短的)方式将 reprBuild iso 编写为事物的组合?

最佳答案

mapping组合器让您可以在任何仿函数(在本例中为 Maybe 仿函数)上提升一个 Iso:

reprBuild' :: Iso' (Maybe UniversalTime) (Maybe SaneDate)
reprBuild' = mapping _Unwrapped

我们也可以利用 First 有一个 Wrapped 实例来获取你想要的 iso:

reprBuild :: Iso' (Maybe UniversalTime) (First SaneDate)
reprBuild = mapping _Unwrapped . _Unwrapped

您还可以使用强制同构:coerced但这仅适用于新型包装器并且需要 ghc >= 7.10。

关于haskell - "compose"怎么是iso的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38096296/

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