gpt4 book ai didi

purescript - 如何映射具有异构元素类型的记录

转载 作者:行者123 更新时间:2023-12-03 22:31:51 25 4
gpt4 key购买 nike

我有一条记录要映射。记录元素是异构类型,但属于更高种类的类型

data U a = U a
data V a = V a

data R a = R {x :: a Int, y :: a String }

fromU2V (U a) = V a

r1 = R { x: U 1, y: U "yo!" }

map f (R { x: x, y: y }) = R { x: f x, y: f y }

r2 = map fromU2V r1
-- :type r2 => R V

我怎样才能做到这一点?上面的代码在行上给我一个错误

map f (R { x: x, y: y }) = R { x: f x, y: f y }
^^^

Could not match type
String
with type
Int

我假设函数 f 在此处被推断为特定类型

PS:代码是纯脚本

最佳答案

通常无法推断出更高级别的类型,例如此 map(至少,现在不能)。我认为您需要添加类型签名:

map :: forall f g. (forall a. f a -> g a) -> R f -> R g
map f (R { x: x, y: y }) = R { x: f x, y: f y }

或者,等效地,使用 NaturalTransformation type synonym Prelude 中定义:

map :: forall f g. (f ~> g) -> R f -> R g

关于purescript - 如何映射具有异构元素类型的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41925980/

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