Я думаю, что вы ищете deepseq
в Control.DeepSeq
, который используется для принудительной полной оценки структур данных.
Его сигнатура типа deepseq :: NFData a => a -> b -> b
, и она работает, полностью оценивая свой первыйаргумент перед возвратом второго.
table = t `deepseq` t
where t = M.fromList . zip ['a'..'z'] $ [1..]
Обратите внимание, что здесь все еще остается некоторая лень.table
не будет оцениваться, пока вы не попытаетесь его использовать, но в этот момент будет оценена вся карта.
Обратите внимание, что, как указал Луки, Data.Map
уже строг в своих ключах,это имеет смысл только в том случае, если вы хотите, чтобы оно было строгим и по своим значениям.