私はさまざまな並べ替えを書いており、これをリストと配列に対しても行っています。私を悩ませていることの 1 つは、次のようなリストの多態的な並べ替え関数を記述できることです。
bubblesort :: (Ord a) => [a] -> [a]
しかし、私はUArray
sに対して同じことをしようとすると:
alterUArray :: (Ix i, Ord e) =>
(STUArray s i e -> ST s ()) -> UArray i e -> UArray i e
alterUArray alter ua = runST $ do
mua <- thaw ua :: ST s1 (STUArray s1 i e)
alter mua
freeze mua
GHC からの長いエラー メッセージで失敗します (正常にUArray Int Int
動作するバージョン)。を指定しようとしましたが、呼び出し{-# LANGUAGE ScopedTypeVariables #-}
の型のあいまいさが解消されません。タイプのないエラー メッセージ: http://hpaste.org/84910。i e
thaw
thaw
ポリモーリックUArray
操作を記述するには何が必要ですか? いくつかの基本的な制限はありますか? そのようなことを可能にするコンパイラ拡張機能はありますか?