次の要件があります: 有理数 (x % y) が与えられた場合:
- y != 1 の場合 => "x y" を返す
- それ以外の場合: "x" を返す
次の関数が機能します。
import Data.Ratio
my_show :: (Integral a, Show a) => (Ratio a) -> String
my_show rat = let x = numerator rat
y = denominator rat in
if y /= 1 then (show x) ++ " " ++ (show y) else show x
よりエレガントにすることは可能ですか?たとえば、 Data.Ratio のソースで、関数入力にいくつかの表記法を使用しているのを見ました: (x:%y)
、しかしそれは私にとってはうまくいきませんでした。したがって、 and を使用let
して明示的に呼び出す必要がnumerator
ありdenominator
ます。