Coleções Haskell com limites de pior caso garantidos para cada operação?
Essas estruturas são necessárias para aplicativos em tempo real - por exemplo, interfaces de usuário. (Os usuários não se importam se clicar em um botão leva 0,1s ou 0,2s, mas eles se importam se o centésimo clique forçar uma computação preguiçosa excepcional e levar 10s para prosseguir.)
Eu estava lendo a tese de OkasakiEstruturas de dados puramente funcionais e ele descreve um método geral interessante para converter estruturas de dados preguiçosos com limites amortizados em estruturas com o mesmolimites do pior caso paracada Operação. A idéia é distribuir cálculos para que, a cada atualização, alguma parte dos thunks não avaliados seja forçada.
Eu gostaria de saber se existe alguma implementação de coleções padrão (Map
, Set
, etc.) em Haskell?
orecipientes pacote diz
O custo declarado de cada operação é o pior caso ou amortizado, mas permanece válido mesmo se as estruturas forem compartilhadas.
Portanto, não há garantia para os limites do pior caso para uma única operação. Existem variantes estritas comoData.Map.Strict
, mas eles são estritos em suas chaves e valores:
Argumentos chave e valor são avaliados para WHNF; Chaves e valores são avaliados para WHNF antes de serem armazenados no mapa.
não há nada sobre (possível) rigor de sua estrutura.