Haskell:无法匹配预期的类型错误

Sim*_*n H 2 haskell

我正在尝试Coursera算法课程并同时学习Haskell,但我现在已经陷入困境几个小时试图编译正在进行的工作.我已经尝试在GHCi中模拟大部分内容并且可以正常工作,但我一直都会遇到类型错误.欢迎有经验的眼睛

   Couldn't match expected type `Int -> [Int] -> Bool'
                with actual type `Int'
    The operator `elem' takes two arguments,
    but its type `Int' has none
    In the expression: otherNode `elem` v''
    In the expression: \ (GraphNode v'' _) -> otherNode `elem` v''
Run Code Online (Sandbox Code Playgroud)

```

import System.Random
import Data.List

-- GraphNode is a list of vertices represented, and its edges
data GraphNode = GraphNode [Int] [Int] deriving (Show, Eq)
type Graph = [GraphNode]


pickEdge :: StdGen -> Graph -> Graph
pickEdge gen graph =
    let
        -- pick a random element in Graph
        (elem, gen') = randomR (1, length graph) gen
        (GraphNode v es) = graph !! elem
        --graph' = delete (GraphNode v es) graph
        graph' = graph

        -- pick a connected Node
        (nodeIndex, _) = randomR (1, length es) gen'
        otherNode :: Int
        otherNode = es !! nodeIndex
        myFilter :: GraphNode -> Bool
        myFilter = \(GraphNode v'' _) -> otherNode `elem` v'' 
        (GraphNode v' es') = head $ filter myFilter graph'
        graph'' = delete (GraphNode v' es') graph'
    in mergeNodes (GraphNode v es) (GraphNode v' es') : graph''
Run Code Online (Sandbox Code Playgroud)

Sea*_*rry 10

elem在解压缩randomRlet语句第一行的结果时,您覆盖了该函数.elem现在是一个Int.

  • 更确切地说,在该函数的范围内,名称`elem`现在绑定到类型`Int`的值,名称`elem`在模块的全局范围内没有反弹. (3认同)