isSquare r = r >= 0 && r == ( sqrtR r )^2 sqrtI = truncate . sqrt . fromInteger sqrtR r = let ( a, b ) = ( numerator r, denominator r ) in ( sqrtI a ) % ( sqrtI b )
というのを書きました もちろんこれはうまくいきます
しかし numerator, denominator をいちいち取り出すのが鬱陶しいので
sqrtR ( a :% b ) = ( sqrtI a ) % ( sqrtI b ) ------- @