在 Idris 中多行写入函数类型
Write function type on multiple lines in Idris
如何在 Idris 中将类型声明拆分为多行?类型应该驱动开发。所以它们可能会变得很长并且不适合屏幕。喜欢这个:
addMatrices : (augent : Vect rowCount (Vect columnCount element)) -> (addend: Vect rowCount (Vect columnCount element)) -> Vect rowCount (Vect columnCount element)
我在检查 Atom 中的类型时弄明白了:
addMatrices : (augent : Vect rowCount (Vect columnCount element)) ->
(addend: Vect rowCount (Vect columnCount element)) ->
Vect rowCount (Vect columnCount element)
如果只是格式化,你可以按照你做的来做,
addMatrices : (augent : Vect rowCount (Vect columnCount element)) ->
(addend: Vect rowCount (Vect columnCount element)) ->
Vect rowCount (Vect columnCount element)
docs说
New declarations must begin at the same level of indentation as the preceding declaration.
同样,book只说了,在第2.4.1节Whitespace significance: the layout rule,
... in any list of definitions and declarations, all must begin in precisely the same column.
由于新行不是新声明,我认为这意味着新行可以从任何缩进级别开始,所以
addMatrices : (augent : Vect rowCount (Vect columnCount element)) ->
(addend: Vect rowCount (Vect columnCount element)) ->
Vect rowCount (Vect columnCount element)
其他变体也有效。
或者,根据 Al.G. 的评论,您可以使用类型别名,但如果 rowCount
和 columnCount
不在范围内,我猜测它们不适合您,您将需要一个类型级函数,它是类型别名的概括。 returns 是一个类型的函数。
Matrix : Nat -> Nat -> Type -> Type
Matrix rows cols elem = Vect rows (Vect cols elem)
那么你将拥有
addMatrices : (augent : Matrix rowCount columnCount element) ->
(addend: Matrix rowCount columnCount element) ->
Matrix rowCount columnCount element
并没有短很多。
老实说,我会考虑使用较短的名称并利用任何明显的上下文
addMatrices : (augent : Vect r (Vect c elem)) -> (addend: Vect r (Vect c elem)) -> Vect r (Vect c elem)
如何在 Idris 中将类型声明拆分为多行?类型应该驱动开发。所以它们可能会变得很长并且不适合屏幕。喜欢这个:
addMatrices : (augent : Vect rowCount (Vect columnCount element)) -> (addend: Vect rowCount (Vect columnCount element)) -> Vect rowCount (Vect columnCount element)
我在检查 Atom 中的类型时弄明白了:
addMatrices : (augent : Vect rowCount (Vect columnCount element)) ->
(addend: Vect rowCount (Vect columnCount element)) ->
Vect rowCount (Vect columnCount element)
如果只是格式化,你可以按照你做的来做,
addMatrices : (augent : Vect rowCount (Vect columnCount element)) ->
(addend: Vect rowCount (Vect columnCount element)) ->
Vect rowCount (Vect columnCount element)
docs说
New declarations must begin at the same level of indentation as the preceding declaration.
同样,book只说了,在第2.4.1节Whitespace significance: the layout rule,
... in any list of definitions and declarations, all must begin in precisely the same column.
由于新行不是新声明,我认为这意味着新行可以从任何缩进级别开始,所以
addMatrices : (augent : Vect rowCount (Vect columnCount element)) ->
(addend: Vect rowCount (Vect columnCount element)) ->
Vect rowCount (Vect columnCount element)
其他变体也有效。
或者,根据 Al.G. 的评论,您可以使用类型别名,但如果 rowCount
和 columnCount
不在范围内,我猜测它们不适合您,您将需要一个类型级函数,它是类型别名的概括。 returns 是一个类型的函数。
Matrix : Nat -> Nat -> Type -> Type
Matrix rows cols elem = Vect rows (Vect cols elem)
那么你将拥有
addMatrices : (augent : Matrix rowCount columnCount element) ->
(addend: Matrix rowCount columnCount element) ->
Matrix rowCount columnCount element
并没有短很多。
老实说,我会考虑使用较短的名称并利用任何明显的上下文
addMatrices : (augent : Vect r (Vect c elem)) -> (addend: Vect r (Vect c elem)) -> Vect r (Vect c elem)