我想制作一个非常人性化的开发环境,我正在考虑使用 PureScript 来提供语言部分。我看到开箱即用, Show
不适用于作为 Show
实例的事物的记录:
log (show {a:5})
“试试 PureScript!” ( http://try.purescript.org/ ) 编译器说:
No type class instance was found for
Prelude.Show { a :: Int
}
是否有一种工具可以通用打印任何数据结构,尤其是包含记录的数据结构?是否有某种类型的技巧可以支持一般地遍历记录以支持我自己的类,例如
present :: Present a => a -> Presentation
?问题是我不知道什么类型会提前。用户输入记录,我希望能够呈现它。看来我必须修补编译器以支持这一点。 最佳答案
实例头中不允许记录。有关讨论和原因,请参阅 this thread 。如果我们要为它们编写实例,它们必须包含在 data
或 newtype
中。
但是,有一个 generics library 和一个派生机制,可以让我们生成 Show
实例。
import Data.Generic
data Foo = Foo {a :: Int} | Bar {b :: String}
derive instance genericFoo :: Generic Foo
instance showFoo :: Show Foo where
show = gShow
关于purescript - 您如何使用 PureScript 向用户呈现任何数据类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37433302/