我尝试为 ADT 定义一个 show 实例,但收到错误Argument list lengths differ in declaration show。我怎样才能在不使用的情况下完成这项工作Generic?
data Route = Home | Users String | User Int | NotFound String
instance showRoute :: Show Route where
show Home = "Home"
show Users str = "Users"
show User i = "User"
show NotFound str = "404"
Run Code Online (Sandbox Code Playgroud)
您必须将构造函数的参数放在括号中。尝试这样的事情:
instance showRoute :: Show Route where
show Home = "Home"
show (Users str) = "Users"
show (User i) = "User"
show (NotFound str) = "404"
Run Code Online (Sandbox Code Playgroud)
Show相关附注:
您还可以Show使用 派生此类简单类型的实例purescript-generic-reps,但必须首先派生实例Generic:
import Data.Generic.Rep (class Generic)
import Data.Show.Generic (genericShow)
data Route = Home | Users String | User Int | NotFound String
derive instance genericRoute :: Generic Route _
instance showRoute :: Show Route where
show = genericShow
Run Code Online (Sandbox Code Playgroud)
我制作了简单的代码片段,以便您可以在try.purescript.org上使用它
甚至可以混合使用这两种方法:
instance showRoute :: Show Route where
show (Users u) = "CusomUsersShow " <> u
show u = genericShow u
Run Code Online (Sandbox Code Playgroud)
出于调试目的,您始终可以使用来自 的traceAny( traceAnyA、spy等) purescript-debug。就我个人而言,我Show仅在必要时才编写实例(例如被迫purescript-test-unit)。
| 归档时间: |
|
| 查看次数: |
568 次 |
| 最近记录: |