Haskell 映射显示到自定义数据类型的列表
作为大学一个大型项目的一部分,用Haskell为一种简单的自定义语言编写一个解释器,我正在尝试打印一些东西来帮助我编写这个东西 有一个自定义数据类型Haskell 映射显示到自定义数据类型的列表,haskell,Haskell,作为大学一个大型项目的一部分,用Haskell为一种简单的自定义语言编写一个解释器,我正在尝试打印一些东西来帮助我编写这个东西 有一个自定义数据类型 data Prog = Prog [Func] deriving (Show, Read) 当我试图在函数的最后一行打印这个程序的一个实例时 interpret :: Prog -> Vars -> String -> MaybeDebug -> IO () interpret prog vars entry _
data Prog = Prog [Func]
deriving (Show, Read)
当我试图在函数的最后一行打印这个程序的一个实例时
interpret :: Prog -> Vars -> String -> MaybeDebug -> IO ()
interpret prog vars entry _ = do
putStrLn "The interpreter isn't written yet. Better get onto that!"
putStrLn "\n\n"
putStrLn (show prog)
putStrLn "\n\n"
putStrLn (show vars)
putStrLn "\n\n"
putStrLn (show entry)
putStrLn "\n\n"
putStrLn (map show [func | func <- prog, (func_name func) == entry])
我收到一个错误,无法将预期类型“Char”与实际类型“String”匹配
一段时间以来,我一直在努力找出问题所在。当列表理解返回func列表时,为什么会提到chars
map show [func | func <- prog, (func_name func) == entry]
或
使用as模式,然后
func <- functions
在列表理解中。如Daniel所述,问题在于putStrLn需要的是字符串,而不是字符串列表 我建议Interlate打印一个逗号分隔的列表
putStrLn (intercalate ", " (map show [func | func <- prog, (func_name func) == entry]))
您需要导入数据。列表以获得插入功能。好的,谢谢,这很有意义。但是,现在Haskell抱怨说,它无法将预期类型“[t0]”与实际类型“Prog”匹配。这是一个问题,我以为我已经解决了引入地图显示,但它似乎只是掩盖了它。你是否也有一个同样令人惊讶的简单解释来解释这个难题?更新了一个可能的解决方案。嘿,老兄,非常感谢。你的解释很清楚,现在有道理了。
mapM_ print [func | func <- prog, (func_name func) == entry]
interpret prog@(Prog functions) vars entry _ = do
func <- functions
putStrLn (intercalate ", " (map show [func | func <- prog, (func_name func) == entry]))