我看到了这个问题:
我发现我可以使用purescript-debug来打印它,例如使用:
> traceAny {a:1} id
{ a: 1 }
unit
我想知道没有记录的默认Show
实例背后的理由是什么:
> {a:1}
Error found:
in module $PSCI
No type class instance was found for
Data.Show.Show { "a" :: Int
}
答案 0 :(得分:6)
Show
只是作为库代码实现的,因此无法编写可以容纳所有可能记录的实例。需要某种约束,你可以说"例如,该记录中每个值的类型也必须有一个Show
实例"。实际的实现也需要有些神奇,因为你不能迭代记录中的标签。
有一些关于改革Show
,such as this one的讨论,通过使Show
完全神奇,只能用于调试目的,可以解决这个问题。
虽然这并没有真正解决您在这里的情况,但可以依靠Generic
派生为Show
'制作newtype
个实例。记录,这可以消除这种事情的一些痛苦:
import Data.Generic (class Generic, gShow)
newtype MyRecord = MyRecord { a :: Int }
derive instance genericMyRecord :: Generic MyRecord
instance showMyRecord :: Show MyRecord where
show = gShow
如果您派生Newtype
,它也会使记录更容易使用,因为您可以使用有助于在newtype下包装/解包/操作的各种操作等。