Аналог команды :t из интерактивного режима ghci

В учебнике по haskell есть раздел посвящённый типам и показана удобная команда :t которой можно посмотреть тип выражений и функций:

ghci> :t 'a'  
'a' :: Char  
ghci> :t True  
True :: Bool  
ghci> :t "HELLO!"  
"HELLO!" :: [Char]  
ghci> :t (True, 'a')  
(True, 'a') :: (Bool, Char)  
ghci> :t 4 == 5  
4 == 5 :: Bool

Поскольку читая текст я тут же пытаюсь всё это выполнить, то я пошёл на ideone.com (к сожалению у меня пока нет возможности поставить локально среду выполнения haskell на своей машине) и написал примерно то же самое:

main = do
    putStrLn "Start"
    :t 'a'
    putStrLn "Finish"

Это не работает, выдаёт ошибку:

Compilation error   #stdin compilation error #stdout 0s 0KB

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

prog.hs:1:5: error:
    • Couldn't match expected type ‘IO t0’ with actual type ‘[IO ()]’
    • In the expression: main
      When checking the type of the IO action ‘main’
  |
1 |     main = do
  |     ^

prog.hs:3:10: error:
    Variable not in scope:
      t :: Char -> (String -> IO ()) -> [Char] -> [IO ()]
  |
3 |         :t 'a'
  |          ^

Аналогично не работает и простое:

:t 'a'

выдаёт ошибку:

Compilation error   #stdin compilation error #stdout 0s 0KB

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

prog.hs:1:1: error: parse error on input ‘:’
  |
1 | :t 'a'
  | ^

Пробовал также через putStrLn ("Finish" ++ show :t 'a') -- тоже не работает.

Подскажите, есть ли какая-то возможность в онлайн-редакторах использовать :t или это возможно только при локальной установке среды haskell и работе с интерактивным режимом через gchi?

Возможно, это не умеет ideone.com но умеют какие-то другие онлайн-ресурсы?


Ответы (2 шт):

Автор решения: A K

Можно использовать typeOf :: forall a. Typeable a => a -> TypeRep для получения объекта TypeRep.

Например:

import Data.Typeable(typeOf)

main = putStrLn ("Finish" ++ show (typeOf 'a'))

К сожалению, подобный подход не сработает с функциями.

Свободный перевод ответа https://stackoverflow.com/a/68428405/5752652 от участника @Willem Van Onsem.

→ Ссылка
Автор решения: Юрий Козлов

Вы пытаетесь вставить команду интерактивной среды в исходный код своей программы. Это, закономерно, не срабатывает.

Попробуйте вместо ideone использовать сервис repl.it. Там можно в правой панели запустить интерактивную среду командой ghci, а уже в ней использовать и команду :t и прочие её возможности.

→ Ссылка