テイラー展開によるネイピア数

30分プログラム、その743。Haskellテイラー展開によるネイピア数を求めてみる。
mixiの課題コミュにインスパイアされています。
数値に関する型クラスがよく分からなくて、A Gentle Introduction to Haskell: Numbersを読みながらやってました。とりあえず浮動小数っぽいのをFloatingに、整数っぽいのをIntegralにしてみました。これでいいよね?

使い方

*Main> e !! 100
2.7182818011463845
*Main> e !! 100
2.7182818284590455

ソースコード

import Data.Ratio
myExp  :: Floating a => a -> [ a ]
term :: (Floating a, Integral b) => a -> b -> a
fact :: Num a => a -> a

fact 0 = 1
fact n = n * fact (n - 1)

term x n = (x ** n') / (fact n')
    where n' = fromRational ((toInteger n) % 1)

myExp x = scanl1 (+) $ map (term x) [0..]

e = myExp 1