我在C#中实现了自己的Promise结构,并想在Haskell中测试这个概念,所以经过一些严重的大脑训练(对我来说还是很新的),我制作了
data Promise f a = PendingPromise f | ResolvedPromise a | BrokenPromise deriving( Show )
class Future p where
later :: (b -> c) -> p (a -> b) b -> p (a -> c) c
resolve :: p (a -> b) a -> a -> p (a -> b) b
instance Future Promise where
later g (PendingPromise f) = PendingPromise (g . f)
later g (ResolvedPromise a) = ResolvedPromise (g a)
resolve (PendingPromise f) a = ResolvedPromise (f …Run Code Online (Sandbox Code Playgroud) 在"了解你一个Haskell"一书中,第11章我们介绍了newtype关键字,这一切对我来说都是有意义的,我们看到将Pair类型作为Functor的一个实例.
本讨论以一个问题陈述开始,即"只有一个参数的类型构造函数可以成为Functor的一个实例".我不明白这个说法.这个限制在哪里描述过?
在讨论的上下文中,我们有一个类型对定义为:
newtype Pair b a = Pair { getPair :: (a,b) }
Run Code Online (Sandbox Code Playgroud)
鉴于此,我本以为我们可以使用类似的东西:
instance Functor (Pair a b) where ...
Run Code Online (Sandbox Code Playgroud)
我原以为(Pair ab)会在Functor的定义中替换'f'而没有任何问题.什么阻止这种工作?
接下来,作者继续使用以下方法使Pair成为Functor的实例:
instance Functor (Pair c) where ...
Run Code Online (Sandbox Code Playgroud)
这是我迷路的地方.我不记得曾经在类型构造函数中看到"部分应用"类型.我不确定在这种情况下这甚至意味着什么,更不用说它如何解决上面提到的问题.
我想我在某个地方有一种误解,但我不知道该去哪里寻找它.我确实找到了这个答案,但它似乎只是回答这个问题的一部分.
haskell ×2