在 Haskell 中输入"="时解析错误



我在Haskell中编写了以下函数

coordenadas :: (Floating a) => String -> (a, a, a)
coordenadas linea = (x, y, z)
    where  (_ : xStr : yStr : zStr : _) = words linea
           x = read $ tail xStr :: Float
           y = read $ tail yStr :: Float
           z = read $ tail zStr :: Float

这个函数旨在接收类似"N1 X2 Y1 Z10"的字符串并生成类似(2, 1, 10)的元组,但是当我尝试编译它时,编译器说行x = read $ tail xStr :: Float中有一个parse error on input '='

有谁知道如何解决它?

感谢您的回答。

我让它工作:

coordinates :: String -> (Float, Float, Float)
coordinates line = (x,y,z)
    where   (_ : xStr : yStr : zStr : _) = words line
            x = read $ tail xStr :: Float
            y = read $ tail yStr :: Float
            z = read $ tail zStr :: Float
main = do
    let line = "test x1.0 y1.0 z1.0 test"
    print $ coordinates line

这将按预期输出(1.0, 1.0, 1.0)

自己对Haskell有点陌生,所以我不知道为什么它对缩进如此挑剔(并且希望从比我更了解的人那里得到指示!),但显然正确的方法是:

  • 制表符where再次按制表符,然后键入第一行
  • 按 3 次制表符,然后将未来的行与该行对齐

(注意:在我的编辑器中,"制表符"是"4个空格",而不是制表符)

编辑:我想我刚刚弄清楚为什么很难在我的末端排队:语法突出显示!我的编辑器加粗"where",这使它更宽,这使得正确的缩进看起来不正确。我实际上通过关闭突出显示来确认这一点,只要线条彼此对齐,它似乎就可以工作。

这也意味着这种方式可能会避免类似的问题:

coordinates :: String -> (Float, Float, Float)
coordinates line = (x,y,z)
    where 
        (_ : xStr : yStr : zStr : _) = words line
        x = read $ tail xStr :: Float
        y = read $ tail yStr :: Float
        z = read $ tail zStr :: Float

相关内容

  • 没有找到相关文章

最新更新