{-# LANGUAGE Arrows #-}
af1 :: Num a => a -> [a]
af1 = proc x -> do
  rec
    g <- returnA -< \n -> if n == 0 then [n] else n : g (n-1)
  returnA -< g x

こんなんか?