我需要一些帮助。在最后一行代码中我总是遇到类型匹配错误,但我不明白为什么'因为它似乎很好...... isGroupInscr(x)(y)返回true或false,我将它与True进行比较,因此没有不匹配... 你能给我一些建议吗? :)
isGroupInscr :: GroupeCours -> Inscription -> Bool
isGroupInscr sigleGroup sigleInscr = getSigle(sigleGroup) /= getSigle2(sigleInscr)
filtreGroupInscr :: [GroupeCours] -> [Inscription] -> [GroupeCours]
filtreGroupInscr listGroupe listInscr = filter (\x y -> isGroupInscr(x)(y) == True) listGroupe
错误:
• Couldn't match expected type ‘Bool’
with actual type ‘Inscription -> Bool’
• The lambda expression ‘\ x y -> isGroupInscr (x) (y) == True’
has two arguments,
but its type ‘GroupeCours -> Bool’ has only one
In the first argument of ‘filter’, namely
‘(\ x y -> isGroupInscr (x) (y) == True)’
In the expression:
filter (\ x y -> isGroupInscr (x) (y) == True) listGroupe
由于
答案 0 :(得分:0)
您需要部分申请
isGroupInscr :: GroupeCours -> Inscription -> Bool
获取具有类型
的函数Inscription -> Bool
可以与filter :: (a -> Bool) -> [a] -> [a]
猜测,我认为你想要的是
isGroupInscr :: GroupeCours -> Inscription -> Bool
isGroupInscr sigleGroup sigleInscr = getSigle sigleGroup /= getSigle2 sigleInscr
filtreGroupInscr :: [GroupeCours] -> [Inscription] -> [GroupeCours]
filtreGroupInscr (g:gs) (l:ls) = if isGroupInscr g l
then g : filtreGroupInscr gs ls
else []
filtreGroupInscr _ _ = []
其他猜测
filtreGroupInscr listGroupe listInscr
= [g | g <- listGroupe , l <- listInscr, isGroupInscr g l]
另外,请注意,除非确实需要,否则您不必使用()
来调用函数。 Haskell使用空间作为函数应用程序。
旁注:使用haskell undefined
魔法,我可以在GHCi中加载不完整的代码来进行类型检查。
code test3.hs
data GroupeCours = GroupeCours
data Inscription = Inscription
data Single = Single deriving Eq
getSigle :: GroupeCours -> Single
getSigle = undefined
getSigle2 :: Inscription -> Single
getSigle2 = undefined
isGroupInscr :: GroupeCours -> Inscription -> Bool
isGroupInscr sigleGroup sigleInscr = getSigle sigleGroup /= getSigle2 sigleInscr
filtreGroupInscr :: [GroupeCours] -> [Inscription] -> [GroupeCours]
filtreGroupInscr (g:gs) (l:ls) = if isGroupInscr g l
then g : filtreGroupInscr gs ls
else []
filtreGroupInscr _ _ = []
filtreGroupInscr' :: [GroupeCours] -> [Inscription] -> [GroupeCours]
filtreGroupInscr' listGroupe listInscr
= [g | g <- listGroupe , l <- listInscr, isGroupInscr g l]
GHCi在行动
$ ghci
GHCi, version 8.0.1: http://www.haskell.org/ghc/ :? for help
Loaded GHCi configuration from /data/works/dotfiles/ghci
Prelude> :l test3.hs
[1 of 1] Compiling Main ( test3.hs, interpreted )
Ok, modules loaded: Main.
*Main> :t isGroupInscr
isGroupInscr :: GroupeCours -> Inscription -> Bool
*Main> :t filtreGroupInscr
filtreGroupInscr :: [GroupeCours] -> [Inscription] -> [GroupeCours]
*Main> :t filtreGroupInscr'
filtreGroupInscr'
:: [GroupeCours] -> [Inscription] -> [GroupeCours]