Búsqueda en los dígitos de pi
El fichero Digitos_de_pi.txt contiene el número pi con un millón de decimales; es decir,
| 1 |    3.1415926535897932384626433832 ... 83996346460422090106105779458151 | 
Definir la función
| 1 |    posicion :: String -> IO (Maybe Int) | 
tal que (posicion n) es (Just k) si k es la posición de n en la sucesión formada por un millón dígitos decimales del número pi y Nothing si n no ocurre en dicha sucesión. Por ejemplo,
| 1 2 3 4 5 6 7 8 9 10 11 12 |    λ> posicion "15"    Just 3    λ> posicion "2017"    Just 8897    λ> posicion "022017"    Just 382052    λ> posicion "14022017"    Nothing    λ> posicion "999999"    Just 762    λ> posicion "458151"    Just 999995 | 
Nota. Se puede comprobar la función mediante The pi-search page o Pi search engine.
Soluciones
| 1 2 3 4 5 6 7 8 9 10 11 12 | import Data.List (isPrefixOf) posicion :: String -> IO (Maybe Int) posicion ns = do   ds <- readFile "Digitos_de_pi.txt"   return (posicionEnLista (drop 2 ds) ns) posicionEnLista :: Eq a => [a] -> [a] -> Maybe Int posicionEnLista xs ys = aux xs 1   where aux [] _ = Nothing         aux (x:xs) n | ys `isPrefixOf` (x:xs) = Just n                      | otherwise              = aux xs (n+1) |