首页 > 解决方案 > 在这种特殊情况下,为什么我会收到不在范围内的错误变量?

问题描述

当我使用以下代码创建一个 .hs 文件并将其加载到 ghci时,该文件会加载,但如果我询问 .hs 的类型,则会:l收到错误消息。我知道这意味着我使用的名称未在我尝试使用它的地方定义,但我看不出代码有什么问题:<interactive>:1:1: error: Variable not in scope: symbolsymbol

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

标签: haskell

解决方案


在 ghci 中输入多行内容(如类型声明、类定义、deriving另一行的子句)时,您必须进入多行模式。您可以输入:{which 将使您进入多行提示,然后输入您的代码,然后:}在另一行输入以退出多行提示。然后,它将您的代码解释为一大块而不是多行。


推荐阅读