簡體   English   中英

在Haskell中將類型映射到列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM