如何在haskell中使用合理的缩进来初始化矩阵

tof*_*tis 3 haskell indentation matrix

我想在haskell中得到一个填充了硬编码值的矩阵.然而,由于haskell中的缩进规则,我设法做到这一点的唯一方法是将整个矩阵写在一条难以阅读的行上.

matrix = [                          
   [1,0,0],
   [0,2,0],
   [0,0,3]
] --parse error (possibly incorrect indentation or mismatched brackets)

matrix = [ [1,0,0], [0,1,0], [0,0,1] ] --OK
Run Code Online (Sandbox Code Playgroud)

建议的方法是什么?

Jus*_* L. 5

haskell社区有点决定我们想要缩进的方式是:

matrix = [ [1, 0, 0 ]
         , [0, 2, 0 ]
         , [0 ,0 ,3 ]
         ]
Run Code Online (Sandbox Code Playgroud)

要么

matrix = [ [1, 0, 0 ]
         , [0, 2, 0 ]
         , [0 ,0 ,3 ] ]
Run Code Online (Sandbox Code Playgroud)

领先的逗号是迄今为止的主导风格:)

你也可以把矩阵搞定

matrix =
  [ [1, 0, 0 ]
  , [0, 2, 0 ]
  , [0 ,0, 3 ] ]

matrix =
  [ [1, 0, 0 ]
  , [0, 2, 0 ]
  , [0 ,0, 3 ]
  ]
Run Code Online (Sandbox Code Playgroud)

你的例子的问题是,只有缩进"过去m"的东西被认为"仍然是矩阵声明的一部分".例如:

matrix = blah
  bloh
bluh
Run Code Online (Sandbox Code Playgroud)

它和thekell bluh处于同一水平m,所以haskell看到bluh并且去了,"这是一个新的声明!我们已经完成了matrix!"

不可否认,编译器错误可能会更清晰:)