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