ツリーを表す新しいデータ型を定義しました。ツリーのすべての要素をウォークオーバーする関数も実装しました。関数walk
の機能バージョンは正しいですが、彼のモナディックバージョンは正しくありませんwalkM
。
module Hdot where
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
data RDoll a = Null | RDoll a [RDoll a] deriving (Show)
test :: RDoll Int
test = RDoll 1 [RDoll 2 [Null], RDoll 3 [RDoll 4 [Null]]]
walk :: (a -> b) -> RDoll a -> [b]
walk f Null = []
walk f (RDoll x rds) = ((f x): (concatMap (\x -> walk f x) rds))
walkM :: (Monad m) => (a -> m b) -> RDoll a -> m [b]
walkM f Null = return []
walkM f (RDoll rd rdss) = do
x <- f rd
xs <- concatMap (walkM f) rdss
return (x:xs)
タイプエラーがあります
Couldn't match type `b' with `[b]'
...
誰かが私を助けることができますか?
返信ありがとうございます。