Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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 GHCi:无法通过自定义类型进行模式匹配_Haskell_Types_Pattern Matching_Ghci - Fatal编程技术网

Haskell GHCi:无法通过自定义类型进行模式匹配

Haskell GHCi:无法通过自定义类型进行模式匹配,haskell,types,pattern-matching,ghci,Haskell,Types,Pattern Matching,Ghci,我已经为Int类型的向量定义了一个自定义类型: data Vector = Vector Int Int Int 现在我想定义一个函数,将一个向量添加到另一个向量,但不知怎么的,语法是不正确的,尽管它与中使用的非常相似 首先尝试使用前缀表示法: Prelude> let vp :: Vector -> Vector -> Vector Prelude| vp (Vector a b c) (Vector d e f) = Vector (a+d) (b+e)

我已经为Int类型的向量定义了一个自定义类型:

data Vector = Vector Int Int Int
现在我想定义一个函数,将一个向量添加到另一个向量,但不知怎么的,语法是不正确的,尽管它与中使用的非常相似

首先尝试使用前缀表示法:

    Prelude> let vp :: Vector -> Vector -> Vector
    Prelude| vp (Vector a b c) (Vector d e f) = Vector (a+d) (b+e) (c+f)

    <interactive>:33:1: parse error on input ‘vp’
    Prelude> let vp :: Vector -> Vector -> Vector
    Prelude| (Vector a b c) `vp` (Vector d e f) = Vector (a+d) (b+e) (c+f)

    <interactive>:35:1: parse error on input ‘(’
Prelude>让vp::Vector->Vector->Vector
前奏曲vp(向量a b c)(向量d e f)=向量(a+d)(b+e)(c+f)
:33:1:输入“vp”时分析错误
第二次尝试,使用中缀符号:

    Prelude> let vp :: Vector -> Vector -> Vector
    Prelude| vp (Vector a b c) (Vector d e f) = Vector (a+d) (b+e) (c+f)

    <interactive>:33:1: parse error on input ‘vp’
    Prelude> let vp :: Vector -> Vector -> Vector
    Prelude| (Vector a b c) `vp` (Vector d e f) = Vector (a+d) (b+e) (c+f)

    <interactive>:35:1: parse error on input ‘(’
Prelude>让vp::Vector->Vector->Vector
前奏曲(向量abc)`vp`(向量def)=向量(a+d)(b+e)(c+f)
:35:1:分析输入“(”上的错误

我使用的是GHCI v7.8.4,这只是一个缩进错误

Prelude> data Vector = Vector Int Int Int deriving Show
Prelude> :{
Prelude| let vp :: Vector -> Vector -> Vector
Prelude|     vp (Vector a b c) (Vector d e f) = Vector (a + d) (b + e) (c + f)
Prelude| :}
Prelude> vp (Vector 1 2 3) (Vector 4 8 12)
Vector 5 10 15
很好用,也很好用

Prelude> :{
Prelude| let vp :: Vector -> Vector -> Vector
Prelude|     Vector a b c `vp` Vector d e f = Vector (a + d) (b + e) (c + f)
Prelude| :}

这只是一个缩进错误

Prelude> data Vector = Vector Int Int Int deriving Show
Prelude> :{
Prelude| let vp :: Vector -> Vector -> Vector
Prelude|     vp (Vector a b c) (Vector d e f) = Vector (a + d) (b + e) (c + f)
Prelude| :}
Prelude> vp (Vector 1 2 3) (Vector 4 8 12)
Vector 5 10 15
很好用,也很好用

Prelude> :{
Prelude| let vp :: Vector -> Vector -> Vector
Prelude|     Vector a b c `vp` Vector d e f = Vector (a + d) (b + e) (c + f)
Prelude| :}

是的,谢谢你。另一方面,如果GHCi像python一样抛出缩进错误…是的,谢谢你。另一方面,如果GHCi像python一样抛出缩进错误。。。