在Haskell中显式键入绑定问题

问题描述

| 问题描述 我用下面的代码来 访问元组列表不是 得到为什么我得到这个错误是 ... 我也想知道我是否 提供执行
mn::[(1,2,3),(6,7,8)]
我怎么能
(6,8)
? 纯功能
type rty= [(Int,Int,Int)]

mn::rty->Int
mn (a,b,c) = a
错误信息
Type error in explicitly typed binding
*** Term           : (a,c)
*** Type           : (a,c)
*** Does not match : rty
    

解决方法

        rty与列表
[(a,b,c)]
相同。您正在匹配一个元组而不是一个列表。也许您想要的是:
mn [] = ?
mn ((a,c):xs) = ?
    ,         模式
(a,c)
匹配三元组,而不是三元组列表(
rty
)。 如果要访问三元组列表中的第二个元素,则必须使用某种递归解决方案(显式或通过库函数)。而是取决于
mn
应该做什么。     ,        您正在尝试匹配一个元组,而不是一个元组列表。我建议您更改类型:
mn :: (Int,Int,Int) -> Int
mn (a,_,_) = a
要访问列表的第n个元素,请像
xs !! 2
中一样使用
(!!)
。请注意,该功能不安全。也就是说,如果列表太短,则会引发异常。     ,        
type rty          = [(Int,Int)]

mn                ::rty -> Int
mn ((a,c):xs)   = a
由于rty是一个元组列表,因此必须从rty中获取一个元组,然后将其返回。