@President42

Почему не работает head со строками в Haskell?

import Data.List

main :: IO()
main = do
    word <- getLine
    putStrLn(head word)


$ ghc Main.hs
[1 of 1] Compiling Main             ( Main.hs, Main.o )

Main.hs:6:19:
    Couldn't match type `Char' with `[Char]'
    Expected type: [String]
      Actual type: String
    In the first argument of `head', namely `word'
    In the first argument of `putStrLn', namely `(head word)'
    In a stmt of a 'do' block: putStrLn (head word)


Компилятор GHC 7.6.3, ОС Debian Jessie

P. S. Здесь написано, что функция head должна принимать массив элементов любого типа (head :: [a] -> a), а ведь строка считается массивом [Char], разве нет?

P. P. S. В REPL (ghci) всё работает
  • Вопрос задан
  • 325 просмотров
Решения вопроса 1
@Lol4t0
putStrLn умеет печатать только строки
Prelude> :t putStrLn
putStrLn :: String -> IO ()

А head word возвращает символ
Нужно переделать его в строку, например
putStrLn . show $ head word
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы