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

Haskell自定义数据类型的自定义打印实现(Repl.it环境)

为Haskell的Length类型自定义Show实例实现自定义打印效果

你需要手动实现Show类的实例来定制打印格式,这里有两种简单的实现方式:

方式一:利用记录字段访问属性

因为你定义Length时用了记录语法,直接通过字段名就能访问实例的属性:

data Length = Length {value :: Double, unit_of_measurement :: String}

instance Show Length where
  show len = show (value len) ++ " " ++ unit_of_measurement len

方式二:通过模式匹配解构实例

如果不想依赖记录字段,也可以直接对Length构造器做模式匹配,取出内部的值:

data Length = Length {value :: Double, unit_of_measurement :: String}

instance Show Length where
  show (Length val unit) = show val ++ " " ++ unit

效果演示

比如你创建一个实例:

deskLength = Length 120.5 "centimeters"

运行print deskLength就会输出120.5 centimeters,而不是默认的Length {value = 120.5, unit_of_measurement = "centimeters"}。

如果需要区分类似Python中__repr__(精确、面向开发者)和__str__(友好、面向用户)的两种格式,你可以额外自定义一个函数,比如:

import Text.Printf

toString :: Length -> String
toString (Length val unit) = printf "%.2f %s" val unit

这样调用toString deskLength会输出120.50 centimeters,适合展示给普通用户;而show方法可以保留更精确的格式,方便调试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:10:25