使用我的代码在Haskell中获取类型错误

时间:2014-11-13 17:04:22

标签: haskell type-conversion incompatibletypeerror

所以我有一个任务 写一个函数

search_string:: String -> String -> Integer
search_string mainstring substring = ...

接受两个字符串参数mainstring和substring,并检查子字符串是否作为mainstring的子字符串出现。如果是这样,函数应计算子字符串开始的mainstring中的位置。如果子串出现多次,则应该计算第一次出现的位置。如果mainstring中没有出现子字符串,则函数应该计算-1

所以这是我目前的代码:

search_string main sub = if sub == take (length sub) main then 0 else search_string_aux main sub 1
search_string_aux main sub n = if sub == search_string (drop n main) sub then n else search_string_aux main sub (n+1)

当我尝试加载时,haskell告诉我:

Labb4hs:11:79:
  Couldn't match expected type '[a0]' with actual type 'Int'
  In the expression : n 
  In the expression:
   If sub == search_string (drop n main) sub then n
   else search_string_aux main sub (n+1)
  In an equation for `search_string_aux':
   search_string_aux main sub n = if sub == search_string (drop n main) sub then n 
   else search_string_aux main sub (n+1) 

所以似乎Haskell认为n应该是[a0] =(string ???),其实际类型为Int,我想让n成为Int,所以我不知道为什么哈斯克尔认为这是[a0]。很高兴能得到一些帮助,因为我是Haskell的新手和一般的编程,我对如何解决它没有任何线索。

1 个答案:

答案 0 :(得分:3)

  1. 尝试向search_string_aux添加类型签名。这将使错误更容易找到。

  2. if sub == search_string ...但是等等,search_string还没有Integer?然而,sub意味着String ......有些东西不在这里。