型シグネチャでもプログラミングするんだなぁ(小並感)

fromMap :: (Monad m, Ord a, Num score_t, Ord score_t)
    => Map a score_t -> StateT (PQueue a score_t) m ()
fromMap = ステートモナド上でMapから順位キューをコンストラクトする実装

として、後で、

fromCountMap::(Monad m, Ord a)
       => Map a Int -> StateT (PQueue a Int) m ()
fromCountMap = fromMap

なんてして制約を強くしてから実際に利用するの、一見無意味に見えて意味がある。そうでしょ?