类型签名只允许在带有 ScopedTypeVariables 的模式中使用 - 使用不带花括号的地方
Type signatures are only allowed in patterns with ScopedTypeVariables - using where without curly braces
我面临以下问题。
当我尝试编译函数时
myFunction :: Int -> Int -> Int
myFunction x y = myVar1
where {myVar1 :: Int;
myVar1 = 1}
一切正常。但是,当我不使用花括号并尝试正确缩进时
myFunction :: Int -> Int -> Int
myFunction x y = myVar1
where myVar1 :: Int
myVar1 = 1
我收到错误
Illegal type signature: `Int myVar1'
Type signatures are only allowed in patterns with ScopedTypeVariables
谁能告诉我这是为什么?
提前致谢
你混合了制表符和空格,确实,如果我们使用 Unicode 的控制图片,我们会看到:
myFunction :: Int -> Int -> Int
myFunction␣x␣y␣=␣myVar1
␣␣␣␣␣where␣myVar1␣::␣Int
␉␣␣␣␣␣␣␣myVar1␣=␣1
注意左侧的水平制表符 (␉
)。混用制表符和空格通常会导致编译器错误,因为在这种特定情况下,Haskell 编译器将其视为类型 myVar1 :: Int myVar1
,因此会出现错误。
因此您应该只使用空格,例如:
myFunction :: Int -> Int -> Int
myFunction x y = myVar1
where myVar1 :: Int
myVar1 = 1
如果我们使用控制图片,我们只会看到空格,并且列与 myVar1 :: Int
部分的列匹配。
myFunction :: Int -> Int -> Int
myFunction␣x␣y␣=␣myVar1
␣␣␣␣␣where␣myVar1␣::␣Int
␣␣␣␣␣␣␣␣␣␣␣myVar1␣=␣1
我面临以下问题。 当我尝试编译函数时
myFunction :: Int -> Int -> Int
myFunction x y = myVar1
where {myVar1 :: Int;
myVar1 = 1}
一切正常。但是,当我不使用花括号并尝试正确缩进时
myFunction :: Int -> Int -> Int
myFunction x y = myVar1
where myVar1 :: Int
myVar1 = 1
我收到错误
Illegal type signature: `Int myVar1'
Type signatures are only allowed in patterns with ScopedTypeVariables
谁能告诉我这是为什么?
提前致谢
你混合了制表符和空格,确实,如果我们使用 Unicode 的控制图片,我们会看到:
myFunction :: Int -> Int -> Int
myFunction␣x␣y␣=␣myVar1
␣␣␣␣␣where␣myVar1␣::␣Int
␉␣␣␣␣␣␣␣myVar1␣=␣1
注意左侧的水平制表符 (␉
)。混用制表符和空格通常会导致编译器错误,因为在这种特定情况下,Haskell 编译器将其视为类型 myVar1 :: Int myVar1
,因此会出现错误。
因此您应该只使用空格,例如:
myFunction :: Int -> Int -> Int
myFunction x y = myVar1
where myVar1 :: Int
myVar1 = 1
如果我们使用控制图片,我们只会看到空格,并且列与 myVar1 :: Int
部分的列匹配。
myFunction :: Int -> Int -> Int
myFunction␣x␣y␣=␣myVar1
␣␣␣␣␣where␣myVar1␣::␣Int
␣␣␣␣␣␣␣␣␣␣␣myVar1␣=␣1