示例 - Data.List具有为Data.Foldable定义的实例,但它在Foldable中定义,而不在列表中(并且针对"[]"而不是"List") .
对于实例与类型本身在同一文件中定义的情况(例如Data.Sequence),'s listed in the docs. For the example, I'与Hoogle或Hayoo没有任何好运 .
虽然我可以看到最常见的事件是具有数据类型定义的实例定义,但是有时必须将它放在单独的文件中 . 我刚碰巧选择了一个使用Data.List的错误示例,还是我在搜索技能中遗漏了一些东西?
澄清:我已经了解可折叠和列表,并且期望每个人在探索Haskell时很早就遇到过这个问题是合理的 . 但是,对于某些复杂类型的T,例如, Snap / Yesod /镜头我不太可能知道一些我从未遇到的更复杂的类型类型是相关的 . 我想知道是否有某种方式明确搜索实例,因为它们没有在类型的文件中定义(可以在类型的自动生成的文档中获取它) .
1 回答
嗯...没有
List
(至少not in the standard library)这样的类型!Haskell实例也可以在类的模块中和数据类型模块中一样定义(或者实际上在其他任何地方定义,但是相反避免使用这样的孤立实例) . 选择取决于哪个模块更多"fundamental":更古怪的模块将依赖于更标准的模块,并且只有在类和类型都在范围内时才能定义实例 . 因为
[]
一直是Haskell的基础之一,而Foldable
更像是更高级通用编程的特定接口;所以很自然地只在Foldable
模块中定义Foldable []
实例 .用于查找实例定义位置的最简单工具是GHCi . 在你的例子中
它的另一种方式也是如此:
现在,当然这甚至都没有赢得范围 . 它不应该:任何人都可以在一些恰好安装在你系统上的软件包中为自己的模糊类型定义实例;它不会在一个更大的框架中使用"standard imports",你将获得所有“标准实例,就像