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)
ため、この例の行は正しくありません。
それは可能ですか?もしそうなら、機能はどうあるべきですか?そうでない場合、なぜですか?