Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell “哈斯克尔”;h1>&引用;语法与科学单元检查_Haskell - Fatal编程技术网

Haskell “哈斯克尔”;h1>&引用;语法与科学单元检查

Haskell “哈斯克尔”;h1>&引用;语法与科学单元检查,haskell,Haskell,我一直在尝试使用Haskell的类型检查器作为任何算术/数学的单位检查器进行复制,以获得一致的单位(即米、千克、秒及其导数) 本质上,介绍了一种计算Peano数字的方法以及递归定义列表的方法。然后使用这两个特征将单位类型定义为列表,每个元素都是一个与米、千克和秒的指数相对应的Peano数字 我被他们提供的以下代码所困扰: -- multiply units composed of non-empty lists recursively instance (Add i j k, Mult r s

我一直在尝试使用Haskell的类型检查器作为任何算术/数学的单位检查器进行复制,以获得一致的单位(即米、千克、秒及其导数)

本质上,介绍了一种计算Peano数字的方法以及递归定义列表的方法。然后使用这两个特征将单位类型定义为列表,每个元素都是一个与米、千克和秒的指数相对应的Peano数字

我被他们提供的以下代码所困扰:

-- multiply units composed of non-empty lists recursively
instance (Add i j k, Mult r s t) =>
         Mult ((a, i) `Cons` r) ((a, j) `Cons` s) ((a, k) `Cons` t) where
  mult ((a, i) `Cons` r) ((_, j) `Cons` s) h1>
    (a, add i j) `Cons` mult r s
在本教程中,我看不到定义了
h1>
。编译器报告:

    parse error (possibly incorrect indentation or mismatched brackets)
    |
314 |     main :: IO ()
    |     ^
其中314是在引入乘法
实例
定义块之前工作的下一行代码。我尝试了上述代码的以下排列:

-- multiply units composed of non-empty lists recursively
instance (Add i j k, Mult r s t) =>
         Mult ((a, i) `Cons` r) ((a, j) `Cons` s) ((a, k) `Cons` t) where
  mult ((a, i) `Cons` r) ((_, j) `Cons` s) ((a, add i j) `Cons` mult r s)
达到同样的结果。由于没有人在教程评论中抱怨,目前我猜两个选项声明是罪魁祸首:

{-# OPTIONS -fglasgow-exts #-}
{-# OPTIONS -fallow-undecidable-instances #-}
因为两者都会发出弃用警告。但在我看来,如果有什么东西被否决了,它应该仍然有效,所以我有点困惑。我正在使用GHC 8.4.3


对于上面的
实例
声明,正确的格式是什么?

我很确定这只是一个打字错误,或者是某种HTML,不知何故粘贴在Haskell脚本中

该代码可能应理解为:

-- multiply units composed of non-empty lists recursively
instance (Add i j k, Mult r s t) =>
         Mult ((a, i) `Cons` r) ((a, j) `Cons` s) ((a, k) `Cons` t) where
   mult ((a, i) `Cons` r) ((_, j) `Cons` s) = (a, add i j) `Cons` mult r s
在链接的教程中,会出现另一个
h1>
,它也应该是
=
。即使教程很旧,也应该在编译时添加一些扩展。GHC应在错误消息中指出您需要哪些扩展。我会继续重新编译它,并根据需要启用扩展


Haskell中没有特殊的
h1>
语法。

(社区:我很想投票以“离题-小错误”来结束这篇文章),但最终还是回答了。我不确定这里的正确操作应该是什么,因为这不是OP的错别字,OP看起来真的被一个看似奇怪的语法弄糊涂了。请随意不同意:-)