type Anagrams = Map String [String]
buildAnagrams :: IO Anagrams
buildAnagrams = do
list <- readCSV "mydict.csv"
return $ foldr f Map.empty list
where
f :: String -> Anagrams -> Anagrams
f s = Map.insertWith (++) (sort s) [s]
変更されない辞書ファイルからアナグラムを検索するためのマップを作成するこの関数があります。他の関数で使用する必要があるため、マップをグローバル変数として使用したいと考えています。現時点では、関数は buildAnagrams で unsafePerformIO を使用していますが、推奨されていないことを認識しています。マップを複数回構築しているため、プログラム全体も非常に遅くなります。これを行うためのより良い方法があるはずですか?