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" と比較するため少々遅いのですが,
もっとうまい方法はないでしょうか?