{-# LANGUAGE TupleSections #-} import Control.Applicative import Control.Monad (guard) import Data.List (unfoldr) g = sum . filter even . unfoldr ( \x -> fmap(x,) $ x`div`2 <$ guard(even x) <|> x*3 + 1 <$ guard( x/=1 ) ) main = print $ g 201