我想将类型的新实例映射到列表的内容。 例如:
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的原因)。
答案 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指出的那样,MyConstructor
是Int -> MyType
类型的函数,因此您可以将其作为map
函数的第一个参数传递。