如何将数据元素映射到数据类型

tur*_*tle 2 haskell

我有一个如下所示的数据类型:

data MyAwesomeType = MyAwesomeType {
                                     a :: String,
                                     b :: String,
                                     c :: String,
                                     ...
                                     -- 25 in total
                                   } deriving (Show)
Run Code Online (Sandbox Code Playgroud)

我有一些看起来像这样的数据:

let xs = [["A", "B", "C", ...],["D", "E", "F", ...]]
Run Code Online (Sandbox Code Playgroud)

为类型中的每个字段指定一个值.

如何将自定义数据类型应用于上面列表中的每个元素?我试图做这样的事情,这是行不通的:

map (MyAwesomeType) xs
Run Code Online (Sandbox Code Playgroud)

Tap*_*ugh 6

您需要定义一个函数以从给定类型转换为自定义类型.在上面的示例中,您需要一个函数

myAwesomeTypeConverter :: [String] -> Maybe MyAwesomeType
myAwesomeTypeConverter (a:b:c:[]) = Just $ MyAwesomeType a b c
myAwesomeTypeConverter _ = Nothing
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用此函数映射数组

map myAwesomeTypeConverter xs
Run Code Online (Sandbox Code Playgroud)

  • 该模式也可以写成`[a,b,c]`. (2认同)