使用一个可能只有3个以上的变量

pyC*_*hon 1 syntax haskell ghc

您好我不明白这一点我自己,我也不能在网上找到一个例子

我试图用一个也许还是一个后卫​​,我发现的例子只有两个变量,当我编辑或下面的例子中有两个以上我得到继承人什么,我试图做一个错误

--maybe example
    Fun :: Double -> Double -> Double -> Maybe Double
    Fun a b c
        | a >= -1.0 || a <= 1.0 || b >= -1.0 || b <=1.0 || c /=0 || c >= -1.0 = Nothing
        | otherwise = Just max(  ((c^ (-c)) +   (a^(-c)-1.0)  ^   (a+ (-1.0/a)))     0.0)
Run Code Online (Sandbox Code Playgroud)

与gchi的错误

 The function `Just' is applied to two arguments,
    but its type `a0 -> Maybe a0' has only one
Run Code Online (Sandbox Code Playgroud)

而hlint给出了

No suggestions
Run Code Online (Sandbox Code Playgroud)

试图使用警卫而我得到一个不同的错误

--guard example
    Fun :: Double -> Double -> Double -> Maybe Double
    Fun a b c
        | a >= -1.0 || a <= 1.0 || b >= -1.0 || b <=1.0 || c /=0 || c >= -1.0 = error "Value out of range "
        | otherwise = max(  ((c^ (-c)) +   (a^(-c)-1.0)  ^   (a+ (-1.0/a)))     0.0)
Run Code Online (Sandbox Code Playgroud)

和继承人ghc和hlints错误

  test.hs:10:1:
        Invalid type signature: Fun :: Double
                                       -> Double -> Double -> Maybe Double
        Should be of form <variable> :: <type>
    $ hlint test.hs
 Error message:
  Left-hand side of type signature is not a variable: Fun
Code:
    Fun :: Double -> Double -> Double -> Maybe Double
  > Fun a b c
Run Code Online (Sandbox Code Playgroud)

dfl*_*str 7

您必须使用小写字母编写函数.这意味着写下这个:

fun :: Double -> Double -> Double -> Maybe Double
fun a b c ...
Run Code Online (Sandbox Code Playgroud)

函数永远不会以大写字母开头,因为大写标识符是为模块(Data.List例如)和类型构造函数和数据构造函数(例如Intor MaybeJust)以及其他一些东西保留的.

您还有Just构造函数的应用程序的问题.如果你这样写:

Just max(something)
Run Code Online (Sandbox Code Playgroud)

......它意味着同样的事情:

Just max something
Run Code Online (Sandbox Code Playgroud)

即你提出Just两个论点.你需要通过调整你的parens来解决这个问题:

Just (max something)
Run Code Online (Sandbox Code Playgroud)