gpt4 book ai didi

haskell - 有没有一种很好的方法来打开元组内部的 Maybe 值?

转载 作者:行者123 更新时间:2023-12-02 15:46:00 25 4
gpt4 key购买 nike

我正在寻找的签名是 (Maybe a, b) -> (a, b),hoogle 返回 no results为了。我可以很容易地把自己写成

import Data.Maybe (fromJust)

fromJustTuple :: (Maybe a, b) -> (a, b)
fromJustTuple (a, b) = (fromJust a, b)

上下文是我正在使用 updateLookupWithKeyMap 上,我可以保证我正在查询的键存在。我可以说

let (Just x, myMap') = updateLookupWithKey f k myMap

,但之后我必须禁用 incomplete-uni-patterns,这是我不想做的。

后退一点,这可能是一个 XY problem .我很高兴听到这样的消息,并了解了一种不同的、更惯用的方法。

最佳答案

将我自己的评论复制到答案中:

您可以将 fromJustTuple 写成 first fromJust(其中 first 来自 Control.Arrow)。

first 具有类型签名:

first :: Arrow a => a b c -> a (b, d) (c, d) 

但是您忽略 first 的“箭头”部分可能是有意义的,并假装它专用于函数,这赋予了它类型:

first :: (b -> c) -> (b, d) -> (c, d)

也就是说:它映射到元组的第一个元素。


最终,我认为你的问题是虽然你“可以保证[你]查询的键存在”,但你无法向类型系统证明这一点,所以除非你能改变它,否则你会必须依赖不安全的函数,例如 fromJust,或者得到不完整的模式匹配警告。

关于haskell - 有没有一种很好的方法来打开元组内部的 Maybe 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74167557/

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