Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/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 可能是findIndex中的Int到Int,带有字符串_Haskell - Fatal编程技术网

Haskell 可能是findIndex中的Int到Int,带有字符串

Haskell 可能是findIndex中的Int到Int,带有字符串,haskell,Haskell,我刚从Haskell开始,必须解决以下任务 我有一个包含工作日的列表,如果在列表中找到,我需要与值st位置对应的索引: weekdays = ["Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag"] findIndex(==st)weekdays 我的代码工作到目前为止,例如,我只得到了3个。然而,我读到,这是一个可能是Int,我只需要其中的数字 因此,我添加了一个函数消除: eliminate :

我刚从Haskell开始,必须解决以下任务

我有一个包含工作日的列表,如果在列表中找到,我需要与值
st
位置对应的索引:

weekdays = ["Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag"]

findIndex(==st)weekdays
我的代码工作到目前为止,例如,我只得到了3个
。然而,我读到,这是一个
可能是Int
,我只需要其中的数字

因此,我添加了一个函数
消除

eliminate :: Maybe Int -> Int
eliminate (Just a) = a
但是如果我在工作日使用
消除findIndex(=st)
它将不起作用,错误是:

*** Expression     : eliminate findIndex (flip (==) st) weekdays
*** Term           : eliminate
*** Type           : Maybe Int -> Int
*** Does not match : a -> b -> c -> d
因为我是个初学者,所以我想不出从这里走下去的路


有人能帮我吗?不幸的是,代码必须在Hugs98上运行。

请注意,Hugs报告的类型错误与函数应用程序的关联性和优先级有关。你的表情

eliminate findIndex (== st) weekdays
尝试首先将
消除
应用于
查找索引
,这不是代码的意图。我想你真正想做的是:

eliminate (findIndex (== st) weekdays)

这两种方法都将
消除
应用于
findIndex(=st)工作日的结果
。这应该是预期的类型检查

但是,在回答您关于如何处理
值的问题时,您可以使用或提取包含的值

这些链接指向当前GHC文档,但应该有相应的Hugs功能

这里有一个提示供将来使用:您可以使用在线搜索Haskell文档。最好的是,您可以通过函数名和类型签名进行搜索。例如,通过搜索可以找到这两个函数

另一种方法是对
以及
仅对一个
进行模式匹配:

eliminate (Just a) = -- Handle a
eliminate Nothing = -- Handle error case

当然,,然后,您必须决定在错误情况下,
消除
的计算结果。

@LoWesT:我添加了更多关于原始表达式优先级的注释,以解释您观察到的原始编译器错误。请注意,一旦您搜索拼写错误的日期名称,您的程序将严重崩溃。这只是代码的一部分,我处理好了。但谢谢你指出这一点=)
eliminate (Just a) = -- Handle a
eliminate Nothing = -- Handle error case