【发布时间】:2014-07-05 05:12:38
【问题描述】:
我有数据类型:
data Posn a = Posn Int Int a
我想为其创建一个自定义 Show 实例,将两个 Int 显示为有序对,如下所示:
showPosn :: Show a => Posn a -> String
showPosn (Posn l c x) = show (l,c) ++ (' ' : show x)
我试过了:
instance Show (Show a => Posn a) where
show = showPosn
但这给了我错误“非法实例声明”。
令人沮丧的是deriving Show 工作得很好。那么,我的问题是:我需要做什么才能获得我的 Show 实例?
【问题讨论】:
-
在学习的过程中犯这种错误是很自然的;也就是说,从中我可以看出你对这门语言相当陌生。制作一门语言是学习 Haskell 的好方法,我只是建议保持开放的心态,而不是在你了解它之前尝试修复它。
-
@luqui 感谢您冷静、宽容的回答。在深夜编码之后,我提出了这个问题,所以我想我的挫败感正在表现出来。是的——我对 Haskell 有点陌生。我是一个 Lisp 小子,我最近才接触到类型理论。
-
另外,如果您认为 Haskell 的类型系统或多或少是“残缺的 DTP”,那么在熟悉 Haskell 之后,您可能想尝试 Agda 或 Idris。