我想将以下函数转换genEdges
为尾递归函数。
genEdges :: Int -> Node -> IO [Edge]
genEdges n origin | n == 0 = return []
| otherwise = do
edge <- genRandEdge origin
edges <- genEdges (n-1) (snd edge)
return $ edge : edges
我的意思是,最后一行应该是
return $ edge : genEdges (n-1) (snd edge)
尽管我知道 和 的类型edge
不同genEdges (n-1) (snd edge)
,因此此示例行不正确。
那可能吗?如果是这样,该功能应该如何?如果不是,为什么?