すいませんでした。orz
snd(runWriter(tak 100 50 0))とかやると糞時間かかりますね。
あとここちょっと違ってます。
 | x <= y = do
   tell(Sum 1)
   return y; 変えた