Podczas pętli w Haskell z warunkiem

Mam tutaj małą sytuację Haskella. Próbuję napisać dwie funkcje z monadami. Najpierw należy iterować przez funkcję, o ile warunek jest prawdziwy dla wejścia / wyjścia funkcji. Drugi powinien używać pierwszego, aby pobrać liczbę jako dane wejściowe i zapisać ją jako wynik, dopóki nie wprowadzisz spacji.

Utknąłem z tym, jakąś pomocą?

module Test where

while :: (a -> Bool) -> (a -> IO a) -> a -> IO a
while praed funktion x = do
                         f <- praed (funktion x)
                         if f == True then do
                                             y <- funktion x
                                             while praed funktion y
                         else return x



power2 :: IO ()
power2 = do putStr (Please enter a number.")
            i <- getChar
            while praed funktion
            where praed x = if x /= ' ' then False else True
                  funktion = i

questionAnswers(2)

yourAnswerToTheQuestion