[英]Mapping a type to a list in Haskell
我想將類型的新實例映射到列表的內容。 例如:
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的原因)。
MyType
構造函數是MyType
Int -> MyType
函數,因此您可以使用
let mapped = map MyType MyList
如果您有更復雜的類型,例如MyType Int String Bool
則可以執行以下操作:
let mapped = map (\i -> MyType i "test" True) MyList
當寫入data MyType = MyType Int
您將聲明一個MyType with a single *constructor*
MyType的MyType 類型 MyType with a single *constructor*
該類型 which takes an
Int and create an object of type
MyType and create an object of type
。
有時令人困惑的是,約定是在只有一個類型和構造函數時使用相同的名稱-就像您所做的那樣。 您可以完美地寫:
data MyType = MyConstructor Int
在這種情況下,正如@Lee所指出的, MyConstructor
是Int- Int -> MyType
類型的函數,因此您可以將其作為map
函數的第一個參數傳遞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.