不同类型的元组

jon*_*eto 1 haskell

有没有办法在Haskell中有一个没有相同类型的对的列表,并使函数遍历它.例如:

a = [(1, "uno"), (2, True), (3, 5)]
Run Code Online (Sandbox Code Playgroud)

想要根据第二个值的类型应用函数,类似于评估对的组合的函数 f :: [(Int, #)] -> [a].

Dan*_*ner 7

对于第一个近似值,不,这是不可能的.首先规范化值,例如,在将它们放入元组之前,通过对每个第二个参数应用一些类多态函数.


Nik*_*kov 5

只需将值包装在sum-type中.例如,

data StringOrBoolOrInt =
  StringOrBoolOrInt_String String |
  StringOrBoolOrInt_Bool Bool |
  StringOrBoolOrInt_Int Int

a :: [(Int, StringOrBoolOrInt)]
a =
  [
    (1, StringOrBoolOrInt_String "uno"),
    (2, StringOrBoolOrInt_Bool True),
    (3, StringOrBoolOrInt_Int 5)
  ]
Run Code Online (Sandbox Code Playgroud)