我想制作一个非常人性化的开发环境,我正在考虑使用 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 。如果我们要为它们编写实例,它们必须包含在 datanewtype 中。

但是,有一个 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/

10-13 09:11