Haskell GHC: какова временная сложность сопоставления с образцом с N конструкторами?

Допустим, у нас есть следующий Haskell:

data T = T0 | T1 | T2 | ... | TN

toInt :: T -> Int
toInt t = case t of
  T0 -> 0
  T1 -> 1
  T2 -> 2
  ...
  TN -> N

Какой алгоритм используется выполнить здесь сопоставление с образцом? Я вижу два варианта:

(1) линейный поиск, что-то вроде

if      (t.tag == T0) { ... }
else if (t.tag == T1) { ... }
else ...

(2) двоичный поиск, который был бы разумным в этой конкретной задаче: поиск t.tag в наборе { К ... T1023 }. Однако там, где сопоставление с образцом в целом имеет много других возможностей и обобщений, его нельзя использовать.

Компиляция с помощью GHC, какой алгоритм используется и какова временная сложность в терминах N для сопоставления с образцом на t в toInt ?

34
задан jameshfisher 27 January 2012 в 00:12
поделиться