命名仿函数的仿函数
Name a functor of functor
我一直在尝试将 Reflex to DMap 0.2 和 运行 更新为一个问题 t运行slating 一个嵌入式函子。
具体来说,它以前使用 GADT 来编码 a -> [WeakSubscriber a]
关系,如下所示:
data FanSubscriberKey k a where
FanSubscriberKey :: k a -> FanSubscriberKey k [WeakSubscriber a]
但是在最新版本的 DMap 中,您可以直接嵌入一个仿函数。我最初将 []
从上面提取出来,但意识到由于我有一个仿函数的仿函数,所以我有一个仿函数并且想一起消除额外的数据。不幸的是,如果不使用新类型,我无法找到一种方法来描述上述映射。 newtype WeakSubscriberList a = WeakSubscriberList [WeakSubscriber a]
可以解决问题,但需要包装和解开新类型。
之前的研究指出这被认为是通常不允许的类型级别的 lambda,但这里的 t运行sformation 似乎很简单,它是可能的,特别是因为我不想定义一个实例或类似的东西。
使用 DMap 0.1 我们可以存储一个 FanSubscriberKey k
并且它的值是 DMap (FanSubscriberKey k)
中的一个 [WeakSubscriber a]
并且它的键被包装在 FanSubscriberKey
构造函数中。在 DMap 0.2 中,如果我定义了上面的 newtype
,我可以类似地说 DMap k WeakSubscriberList
并得到一个类似的结果,它有一个未包装的键,但一个值包装在 WeakSubscriberList
中。然而,我想说的是 DMap k [WeakSubscriber]
但这显然行不通,因为 []
是善良的 * -> *
,而 WeakSubscriber
是善良的 * -> *
。如果有一个类型级别 .
这样 [] '. WeakSubscriber
编译就可以了,但它同样不存在。我还尝试了类型别名,但 type WeakSubscriberList a = [WeakSubscriber a]
要求在使用 WeakSubscriberList
的任何地方指定 a
。
Data.Functor.Compose
是间接避免 newtype
的直接方式。它仍然涉及一个 newtype
,因为那是 Compose
的定义方式,但是不需要定义一个新的。
上面的例子变成了DMap k (Compose [] WeakSubscriber)
.
我一直在尝试将 Reflex to DMap 0.2 和 运行 更新为一个问题 t运行slating 一个嵌入式函子。
具体来说,它以前使用 GADT 来编码 a -> [WeakSubscriber a]
关系,如下所示:
data FanSubscriberKey k a where
FanSubscriberKey :: k a -> FanSubscriberKey k [WeakSubscriber a]
但是在最新版本的 DMap 中,您可以直接嵌入一个仿函数。我最初将 []
从上面提取出来,但意识到由于我有一个仿函数的仿函数,所以我有一个仿函数并且想一起消除额外的数据。不幸的是,如果不使用新类型,我无法找到一种方法来描述上述映射。 newtype WeakSubscriberList a = WeakSubscriberList [WeakSubscriber a]
可以解决问题,但需要包装和解开新类型。
之前的研究指出这被认为是通常不允许的类型级别的 lambda,但这里的 t运行sformation 似乎很简单,它是可能的,特别是因为我不想定义一个实例或类似的东西。
使用 DMap 0.1 我们可以存储一个 FanSubscriberKey k
并且它的值是 DMap (FanSubscriberKey k)
中的一个 [WeakSubscriber a]
并且它的键被包装在 FanSubscriberKey
构造函数中。在 DMap 0.2 中,如果我定义了上面的 newtype
,我可以类似地说 DMap k WeakSubscriberList
并得到一个类似的结果,它有一个未包装的键,但一个值包装在 WeakSubscriberList
中。然而,我想说的是 DMap k [WeakSubscriber]
但这显然行不通,因为 []
是善良的 * -> *
,而 WeakSubscriber
是善良的 * -> *
。如果有一个类型级别 .
这样 [] '. WeakSubscriber
编译就可以了,但它同样不存在。我还尝试了类型别名,但 type WeakSubscriberList a = [WeakSubscriber a]
要求在使用 WeakSubscriberList
的任何地方指定 a
。
Data.Functor.Compose
是间接避免 newtype
的直接方式。它仍然涉及一个 newtype
,因为那是 Compose
的定义方式,但是不需要定义一个新的。
上面的例子变成了DMap k (Compose [] WeakSubscriber)
.