You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PureScript中()的定义是什么?与Unit类型有何区别?

PureScript中()的定义与REPL查询问题解决

问题说明

在PureScript的类型签名里看到(),原本以为它和Haskell的单元类型等价,但发现PureScript使用Unit作为单元类型,因此疑惑()的具体定义。同时在spago repl中查询()的类型、信息时出现报错,报错内容如下:

> :t ()                                                              
Unexpected token ')' at line 1, column 2
> :i ()
Unrecognized directive. Type :? for help.
> :k ()
Error found:
at :1:2 - 1:3 (line 1, column 2 - line 1, column 3)

  Type variable k is undefined.

while inferring the kind of k
while checking that type k
  has kind Type
while inferring the kind of () @k

解决方法

1. ()的本质定义

在PureScript中,()是**Unit类型唯一构造器的语法糖**,对应的类型是Unit(定义在Prelude核心模块中):

  • 类型本身:Unit(一个仅包含唯一值的数据类型)
  • 该类型的唯一值:可以写成构造器原名Unit,也可以用语法糖()替代

和Haskell的核心区别是:Haskell里()同时作为类型和该类型的唯一值;而PureScript将类型与值明确分开,类型名为Unit,值的构造器为Unit,()只是这个构造器的简写形式。

2. REPL查询报错的修正

你在spago repl中的查询方式不符合解析规则,正确操作如下:

  • 查询()的值类型:
    由于REPL无法直接解析单独的()作为查询对象,可先将其赋值给变量再查询:
    > x = ()
    > :t x
    Unit
    
    或者直接查询构造器原名的类型:
    > :t Unit
    Unit
    
  • 查询Unit类型的定义:
    > :i Unit
    data Unit
      = Unit
    import Prelude
    
  • 查询Unit类型的种类:
    > :k Unit
    Type
    

内容的提问来源于stack exchange,提问作者Chris Stryczynski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 23:02:32