haskell - 在这种特殊情况下,为什么我会收到不在范围内的错误变量?
问题描述
当我使用以下代码创建一个 .hs 文件并将其加载到 ghci时,该文件会加载,但如果我询问 .hs 的类型,则会:l
收到错误消息。我知道这意味着我使用的名称未在我尝试使用它的地方定义,但我看不出代码有什么问题:<interactive>:1:1: error: Variable not in scope: symbol
symbol
module MyData
(MetricUnit(..),
ImperialUnit(..),
Measurement(..),
convert)
where
data MetricUnit = Meter | Liter | KiloGram
deriving (Show, Eq)
data ImperialUnit = Yard
| Gallon
| Pound
deriving (Show, Eq)
data Measurement = MetricMeasurement Double MetricUnit
| ImperialMeasurement Double ImperialUnit
deriving (Show)
symbol :: MetricUnit -> String
symbol Meter = "m"
symbol Liter = "L"
symbol KiloGram = "kg"
convert (MetricMeasurement x u)
| u==Meter = ImperialMeasurement (1.0936*x) Yard
| u==Liter = ImperialMeasurement (0.2642*x) Gallon
| u==KiloGram = ImperialMeasurement (2.2046*x) Pound
convert (ImperialMeasurement x u)
| u==Yard = MetricMeasurement (0.9144*x) Meter
| u==Gallon = MetricMeasurement (3.7854*x) Liter
| u==Pound = MetricMeasurement (0.4536*x) KiloGram
解决方案
在 ghci 中输入多行内容(如类型声明、类定义、deriving
另一行的子句)时,您必须进入多行模式。您可以输入:{
which 将使您进入多行提示,然后输入您的代码,然后:}
在另一行输入以退出多行提示。然后,它将您的代码解释为一大块而不是多行。
推荐阅读
- stun - 当我们需要使用/安装私有 stun/turn 服务器时
- doxygen - Doxygen:如何组合来自不同文件夹的多个 html 输出
- c++ - 如何将两行或多行 QSplineSeries 添加到一个 QChartView
- android - Confetti Android 的定位/设置方向
- date - Microstrategy 从 YYYYMM 格式创建属性 Previoux 月份
- javascript - 视频结束并单击按钮后切换视频
- angular - 以角度从 stencilJS 组件发出的单元测试事件
- vega-lite - 如何安装 vega-lite-cli
- json - 启动配置片段中的变量
- c# - 将 TagBuilder 核心方法从 ASP.NET MVC 5 迁移到 ASP.NET Core (.NET 5)