Haskell非穷举模式和转换函数输出

Chi*_*llo 1 haskell

我有一个想要列出所有a的函数dataType.

fn [] = []
fn (dt@(DataType t d y [(f,r)]):dts) = ["T:" ++ t ++ " D: " ++ d ++ " R: " ++ show y ++ "Ra" ++ show (fnAvg dt)] ++ fn dts
Run Code Online (Sandbox Code Playgroud)

其中t和d是字符串,y是一个int,f是一个字符串,r是一个int(不确定f和r是否重要,将解释为什么).

我得到错误非详尽的模式,并假设这是因为当列表中只有一个元素时我没有一个,所以我在其他模式之间添加了这个:

fn [dt@(DataType t d y [(f,r)])] = ["T:" ++ t ++ " D: " ++ d ++ " R: " ++ show y ++ "Ra" ++ show (fnAvg dt)]
Run Code Online (Sandbox Code Playgroud)

它编译了,但是当我调用它时,它再一次告诉我'非详尽的模式'.我很难想到我错过了什么样的模式,我是否应该在之后添加一个通配符模式来捕获所有内容?我不是在找人写出答案,但欢迎提示或建议.

Mat*_*hid 5

该模式[(f,r)]仅在列表包含一个元素时匹配.如果它包含零个,或两个或任何其他数字,则表明模式匹配失败.

在这种情况下代码应该做什么,我不能说......

  • 代码针对几种不同的模式尝试参数`fn`,但是`DataType`的最后一个参数是_always_` [(f,r)]`,它只匹配一个元素列表. (3认同)