我正在阅读ClassyPrelude的公告,并且到了这里:
instance (b ~ c, CanFilterFunc b a) => CanFilter (b -> c) a where
filter = filterFunc
Run Code Online (Sandbox Code Playgroud)
作者随后提到这不起作用:
instance (CanFilterFunc b a) => CanFilter (c -> c) a where
filter = filterFunc
Run Code Online (Sandbox Code Playgroud)
这对我来说很有意义,因为c它与左边的约束完全无关.
但是,文章中没有提到的内容和我不理解的是为什么这不起作用:
instance (CanFilterFunc b a) => CanFilter (b -> b) a where
filter = filterFunc
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么这与第一个提到的定义不同?也许GHC类型推断的一个有效例子会有所帮助吗?
haskell ×1