Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 映射显示到自定义数据类型的列表_Haskell - Fatal编程技术网

Haskell 映射显示到自定义数据类型的列表

Haskell 映射显示到自定义数据类型的列表,haskell,Haskell,作为大学一个大型项目的一部分,用Haskell为一种简单的自定义语言编写一个解释器,我正在尝试打印一些东西来帮助我编写这个东西 有一个自定义数据类型 data Prog = Prog [Func] deriving (Show, Read) 当我试图在函数的最后一行打印这个程序的一个实例时 interpret :: Prog -> Vars -> String -> MaybeDebug -> IO () interpret prog vars entry _

作为大学一个大型项目的一部分,用Haskell为一种简单的自定义语言编写一个解释器,我正在尝试打印一些东西来帮助我编写这个东西

有一个自定义数据类型

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]))