如何取消装箱数据类型?

时间:2015-04-30 09:57:27

标签: haskell

我有以下代码段:

newtype SomeType = SomeType [(Int,Double)]
  deriving (Eq,Show)

我的功能接受SomeType。如何迭代列表的每个元素?

3 个答案:

答案 0 :(得分:6)

SomeType是否被声明为datanewtype,过程是相同的:您只需对其进行模式匹配。

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)]