在Haskell中创建没有参数的函数时出现分析错误

在Haskell中创建没有参数的函数时出现分析错误,haskell,Haskell,我试图创建一个没有参数的函数来创建一个列表。当我试图运行代码时,我得到一个解析错误,它无法编译,我不知道为什么 我一直试图在终端上运行它,但它不起作用 这是我的代码: outfits = let pants = ["jeans", "khaki", "leggings"] shirts = ["white shirt", "grey turtleneck", "pink polo", "green hoodie"] shoes = ["br

我试图创建一个没有参数的函数来创建一个列表。当我试图运行代码时,我得到一个解析错误,它无法编译,我不知道为什么

我一直试图在终端上运行它,但它不起作用

这是我的代码:

outfits = let pants = ["jeans", "khaki", "leggings"]
              shirts = ["white shirt", "grey turtleneck", "pink polo", "green hoodie"]
              shoes = ["brogues", "converse", "sandals", "adidas"]

outfits1 = [ (x, y, z) | z <- pants, y <- shirts, x <- shoes ]
oughts=let pants=[“牛仔裤”、“卡其色”、“紧身裤”]
衬衫=[“白色衬衫”、“灰色高领毛衣”、“粉色马球衫”、“绿色连帽衫”]
鞋=[“brogues”、“匡威”、“凉鞋”、“阿迪达斯”]

oughts1=[(x,y,z)| z如果没有
let
表达式,您只需编写

outfits = [ (x, y, z) | z <- ["jeans", "khaki", "leggings"], y <- ["white shirt", "grey turtleneck", "pink polo", "green hoodie"], x <- ["brogues", "converse", "sandals", "adidas"] ]
或者,您可以使用
where
子句编写此代码,该子句将“main”表达式放在第一位:

outfits = [ (x, y, z) | z <- pants, y <- shirts, x <- shoes ]
              where pants = ["jeans", "khaki", "leggings"]
                    shirts = ["white shirt", "grey turtleneck", "pink polo", "green hoodie"]
                    shoes = ["brogues", "converse", "sandals", "adidas"]
您仍然可以使用
let
表达式或
where
子句为装备的每个组件提供名称:

outfits = let pants = ["jeans", "khaki", "leggings"]
              shirts = ["white shirt", "grey turtleneck", "pink polo", "green hoodie"]
              shoes = ["brogues", "converse", "sandals", "adidas"]
          in (,,) <$> pants <*> shirts <*> shoes
oughts=let pants=[“牛仔裤”、“卡其色”、“紧身裤”]
衬衫=[“白色衬衫”、“灰色高领毛衣”、“粉色马球衫”、“绿色连帽衫”]
鞋=[“brogues”、“匡威”、“凉鞋”、“阿迪达斯”]
穿着(,)裤子衬衫鞋子

服装=(,)裤子衬衫鞋子 其中裤子=[“牛仔裤”、“卡其色”、“紧身裤”] 衬衫=[“白色衬衫”、“灰色高领毛衣”、“粉色马球衫”、“绿色连帽衫”] 鞋=[“brogues”、“匡威”、“凉鞋”、“阿迪达斯”]

如果
…..
看起来太深奥,您可以给模式一个更具描述性的名称:

outfits = mixAndMatch pants shirts shoes
           where pants = ["jeans", "khaki", "leggings"]
                 shirts = ["white shirt", "grey turtleneck", "pink polo", "green hoodie"]
                 shoes = ["brogues", "converse", "sandals", "adidas"]
                 mixAndMatch a b c = (,,) <$> a <*> b <*> c
oughts=mixAndMatch裤子衬衫鞋子
其中裤子=[“牛仔裤”、“卡其色”、“紧身裤”]
衬衫=[“白色衬衫”、“灰色高领毛衣”、“粉色马球衫”、“绿色连帽衫”]
鞋=[“brogues”、“匡威”、“凉鞋”、“阿迪达斯”]
mixAndMatch AB c=(,)AB c

let附带的
中的
在哪里?没有没有没有参数的函数。
oughts1
只是一个列表。
mixAndMatch=liftA3(,,)
,即使你不喜欢applicative样式,这可能更适合内联。或者,对于仍在学习语法的人来说,跳入applicative可能有点过分。@rampion
zip3
不会计算三个列表的叉积。
outfits = (,,) <$> ["jeans", "khaki", "leggings"]
               <*> ["white shirt", "grey turtleneck", "pink polo", "green hoodie"]
               <*> ["brogues", "converse", "sandals", "adidas"]
outfits = let pants = ["jeans", "khaki", "leggings"]
              shirts = ["white shirt", "grey turtleneck", "pink polo", "green hoodie"]
              shoes = ["brogues", "converse", "sandals", "adidas"]
          in (,,) <$> pants <*> shirts <*> shoes
outfits = (,,) <$> pants <*> shirts <*> shoes
              where pants = ["jeans", "khaki", "leggings"]
                    shirts = ["white shirt", "grey turtleneck", "pink polo", "green hoodie"]
                    shoes = ["brogues", "converse", "sandals", "adidas"]
outfits = mixAndMatch pants shirts shoes
           where pants = ["jeans", "khaki", "leggings"]
                 shirts = ["white shirt", "grey turtleneck", "pink polo", "green hoodie"]
                 shoes = ["brogues", "converse", "sandals", "adidas"]
                 mixAndMatch a b c = (,,) <$> a <*> b <*> c