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