有理数が扱えるなんて、便利です。

そんなわけで、ほとんど問題そのままの実装。

はじめは、numeratorの使い方が分からなかった。

こうしてました

>numerator 31%5

正しくは

>numerator$31%5

でした。

import Data.Ratio
import Data.Char
frac =2:(concat[[1,2*n,1]|n<-[1..]])
p065 n = sum.map digitToInt.show.numerator.foldr1 f.take n $ frac
where f a b = a+1/b

短くしてみた。

import Data.Ratio
import Data.Char
main=print.sum.map digitToInt.show.numerator.foldr1(x-> y->x+1/y).take 100$2:concat[[1,2*n,1]|n<-[1..]]