Haskell-如何在列表理解中使用if-then-else?

Haskell-如何在列表理解中使用if-then-else?,haskell,Haskell,我希望通过掷两个骰子生成一个点数列表。如果两个骰子显示相同的值,则输出点将变成(i,i,i,i) 我的代码是 [(i,j)|i<-[1..6],j<-[1..6], if i==j then (i,i,i,i) else (i,j)] 列表元素应该是相同的类型,您的4元组和2元组不是。 如果你换成列表,你可以这样写 [if i==j then [i,i,i,i] else

我希望通过掷两个骰子生成一个点数列表。如果两个骰子显示相同的值,则输出点将变成
(i,i,i,i)

我的代码是

[(i,j)|i<-[1..6],j<-[1..6], if i==j
                            then (i,i,i,i)
                            else (i,j)]

列表元素应该是相同的类型,您的4元组和2元组不是。 如果你换成列表,你可以这样写

[if i==j then [i,i,i,i] else [i,j] | i<-[1..6], j<-[1..6]]

那么你想要的输出列表是什么类型的呢?你已经编辑了注释中的问题,但问题仍然存在:你想要的输出列表是什么类型的?(该注释是为了检查你对Haskell的理解,因为Haskell是一种严格类型的语言,所以你一定误解了什么。)看。好奇,如果只有两个骰子,为什么相同值骰子会创建一个4元组?
[if i==j then [i,i,i,i] else [i,j] | i<-[1..6], j<-[1..6]]
[[1,1,1,1],[1,2],[1,3],[1,4],[1,5],[1,6],
 [2,1],[2,2,2,2],[2,3],[2,4],[2,5],[2,6],
 [3,1],[3,2],[3,3,3,3],[3,4],[3,5],[3,6],
 [4,1],[4,2],[4,3],[4,4,4,4],[4,5],[4,6],
 [5,1],[5,2],[5,3],[5,4],[5,5,5,5],[5,6],
 [6,1],[6,2],[6,3],[6,4],[6,5],[6,6,6,6]]