将类型映射到Haskell中的列表

时间:2014-05-12 12:22:47

标签: list haskell types map

我想将类型的新实例映射到列表的内容。 例如:

MyList = [1..10]
data MyType = MyType Int

map (MyType (\x -> x)) MyList

我希望获得类似[MyType,MyType ...]的内容,其中每个MyType Int值都来自列表。 这不起作用,我怎样才能做到这一点?还是有更好的方法?

谢谢!

编辑:我忘了MyType更复杂,例如:

data MyType = MyType Int String Bool

所以,我怎样才能将列表中的整数映射到MyType的Int部分,保持其他值像MyType一样固定...“test”True(这就是我想到lambda的原因)。

2 个答案:

答案 0 :(得分:2)

MyType构造函数是函数Int -> MyType,因此您只需使用

let mapped = map MyType MyList

如果你有一个更复杂的类型,例如MyType Int String Bool然后你可以这样做:

let mapped = map (\i -> MyType i "test" True) MyList

答案 1 :(得分:0)

撰写data MyType = MyType Int时,您宣布类型 MyType with a single *constructor* MyType which takes an Int and create an object of type MyType`。

有时令人困惑的部分是,当只有一个时,约定是对类型和构造函数使用相同的名称 - 就像你做的那样。你完全可以写:

data MyType = MyConstructor Int

在这种情况下,正如@Lee指出的那样,MyConstructorInt -> MyType类型的函数,因此您可以将其作为map函数的第一个参数传递。