関数型プログラミング言語Haskell

このエントリーをはてなブックマークに追加
0〜9を1つずつ使った平方数を全て出力する関数を以下のように書きました

main = print list

list = [ x * x | x <- [min..max], iSort (show (x * x)) == "0123456789" ]
 where
 min = toInteger(truncate (sqrt (fromInteger 1023456789)))
 max = toInteger(floor (sqrt (fromInteger 9876543210)))

iSort xs = foldr ins [] xs
 where
 ins x [] = [x]
 ins x (y:ys)
  | x <= y = x : (y:ys)
  | otherwise = y : ins x ys

0〜9を全て使っていることを確認するために,数を一度文字列に変換して
ソートして "0123456789" と比較するため少々遅いのですが,
もっとうまい方法はないでしょうか?