繁体   English   中英

`someFunction' 的方程有不同数量的参数 (CodeWars)

[英]Equations for `someFunction' have different numbers of arguments (CodeWars)

我正在使用以练习/学习 Haskell。 我无法理解为什么给定的情况适用于我的示例本地代码,而不适用于 CodeWars。

关于代码战:

module Codewars.Kata.Negative where

makeNegative :: (Num a) => a -> a
makeNegative x = x + x
makeNegative = error "todo: makeNegative"

这给了我:

Codewars/Kata/Negative.hs:4:1:
    Equations for `makeNegative' have different numbers of arguments
      Codewars/Kata/Negative.hs:4:1-22
      Codewars/Kata/Negative.hs:5:1-41

但是当我在本地测试时:

import Data.List
import System.IO

example :: (Num a) => a -> a
example x = x + x
main = do
  print (example(3))

它正确返回 6。 我什至无法尝试解决问题,因为编译器抱怨参数。 有点明白 Num 是一个“类型类”,但我不明白它在代码战中的工作方式有何不同。 我猜是因为那里的“where”子句。

问题在于您对makeNegative的定义。 请注意,定义中有三行:

makeNegative :: (Num a) => a -> a
makeNegative x = x + x
makeNegative = error "todo: makeNegative"

第一个是类型签名,然后是两个定义。 当参数的模式匹配和处理不同的情况时,通常会提供多个定义; 但是在这种情况下,模式匹配永远不会失败; 所以error行永远不会运行。

不管它永远不会运行; Haskell 仍然要求函数的所有实现具有相同数量的绑定参数, makeNegative x =绑定一个参数(即x ); 但第二个定义makeNegative =不绑定任何参数。 在这种情况下,它看起来像是一个占位符定义,因此您可以删除有error的行,它应该可以工作。

您的example测试只有一个定义,因此不会遇到此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM