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

为什么Haskell的Random类无最小完整定义却要求实现random和randomR

问题原因
  • 你遇到的是random-1.2.x版本的接口重构带来的文档表述歧义问题:
    • 该版本将原Random类的核心逻辑拆分到了新增的Uniform、UniformRange两个类型类中,文档标注的「最小完整定义为无」,指的是如果你为目标类型实现了上述两个新类型类的实例,Random类的random、randomR方法可以自动获得默认实现,不需要额外写代码。
    • 如果你没有实现Uniform、UniformRange实例,就必须手动实现random和randomR两个方法,否则就会触发你收到的编译告警和运行时异常。
  • 你的Color类型已经派生了Bounded,只需要补充派生Enum类,就可以直接使用内置的通用实现,无需手动编写方法逻辑,修改后的代码如下:
data Color = Red | Blue deriving (Bounded, Enum, Show)

instance Random Color where
  randomR = randomREnum
  random = randomEnum

如果开启DeriveAnyClass扩展,还可以进一步简化为:

{-# LANGUAGE DeriveAnyClass #-}
data Color = Red | Blue deriving (Bounded, Enum, Show, Random)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:48:05