Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 哈斯克尔缩进问题_Haskell_Indentation - Fatal编程技术网

Haskell 哈斯克尔缩进问题

Haskell 哈斯克尔缩进问题,haskell,indentation,Haskell,Indentation,我使用visualstudio代码作为chice的文本编辑器 下面的Haskell代码不编译。显然是由于缩进或缺少括号的错误。因为没有括号,我想知道问题在哪里 safeSqrt :: Either String Doubble -> Either String | Doubble safeSqrt sx = case sx of Left str -> Left str Right x -> if x < 0

我使用visualstudio代码作为chice的文本编辑器 下面的Haskell代码不编译。显然是由于缩进或缺少括号的错误。因为没有括号,我想知道问题在哪里

safeSqrt :: Either String Doubble -> Either String | Doubble
safeSqrt sx =
     case sx of
         Left str -> Left str
         Right x -> if x < 0
             then Left "Error"
             else Right $ sqrt x
有人能帮忙吗

谢谢


汤姆

问题不在于缩进。它具有类型签名。您在签名中使用了管道字符(
|
)作为
的签名。你应该把它去掉。此外,您还拼错了
double
。虽然双精度和双精度b很好,但不幸的是,它不是a
double
的名称:

safeSqrt :: Either String Double -> Either String Double
safeSqrt sx =
     case sx of
         Left str -> Left str
         Right x -> if x < 0
             then Left "Error"
             else Right $ sqrt x
safeSqrt::任意字符串双精度->任意字符串双精度
safeSqrt sx=
案例sx
左str->左str
右x->如果x<0
然后留下“错误”

else Right$sqrt x
类型应该是
字符串Double
,而不是中间有管道。有趣的是,解析器对
|
做了什么,因为它不是导致问题的字符本身?@chepner:我也不确定。它可能与函数依赖性有关,因为这是具有函数依赖性的类的“签名”的一部分。但这只是猜测。是的,相同的语法规则可能适用于类型定义和类型注释,即使
没有任何意义(我知道)在注释中。@chepner我猜它看起来像是
x | condition1=value1 | condition2=value2
的变体,除了我们在
x
上有一个类型签名,例如
(x::Int)| condition=…
。OP缩进将在错误的位置添加分号,如
(x::Int)|条件;x=…
谢谢威廉,现在它已经编译了…:-]
safeSqrt :: Either String Double -> Either String Double
safeSqrt sx =
     case sx of
         Left str -> Left str
         Right x -> if x < 0
             then Left "Error"
             else Right $ sqrt x