我有以下代码段:
newtype SomeType = SomeType [(Int,Double)]
deriving (Eq,Show)
我的功能接受SomeType
。如何迭代列表的每个元素?
答案 0 :(得分:6)
SomeType
是否被声明为data
或newtype
,过程是相同的:您只需对其进行模式匹配。
my_function (SomeType list) = ...
答案 1 :(得分:2)
您可以使用map
来迭代列表中的每个元素。除了@ MathematicalOrchid的答案之外,另一种方法是通过引入一个unwrapper函数并使用它:
newtype SomeType = SomeType { getSomeType :: [(Int,Double)] }
deriving (Eq,Show)
myFunction :: SomeType -> SomeType
myFunction xs = SomeType $ map (\(x,y) -> (x*2,y)) (getSomeType xs)
答案 2 :(得分:1)
在您的类型定义中,数据构造函数SomeType
(右侧)可用于模式匹配以提取该类型的字段,因此在foo (SomeType st) = ...
中,st
将是一个列表类型为[(Int, Double)]
。