Любой способ распечатать тип переменной в блоке do/while/let?
Есть ли способ распечатать выведенный тип вложенной переменной в ghci
? Рассмотрим код,
let f = g where
g (x :: Int) = x
тогда было бы неплохо запросить тип g
, например. :t f.g
распечатает Int -> Int
.
Ответы
Ответ 1
Вы можете уговорить эту информацию, предоставив соответствующую аннотацию неправильного типа и проверив сообщение об ошибке.
*Main> let f = g where g::a; g (x::Int) = x
<interactive>:1:23:
Couldn't match type `a1' with `Int -> Int'
`a1' is a rigid type variable bound by...
Ответ 2
Отладчик ghci может распечатать его для вас с правильно размещенной точкой останова (но вам нужно загрузить свое определение в модуле):
{-# LANGUAGE ScopedTypeVariables #-}
f a = g a where
g (x :: Int) = x
Тогда в ghci:
Prelude> :l tmp2.hs
[1 of 1] Compiling Main ( tmp2.hs, interpreted )
Ok, modules loaded: Main.
*Main> :b 3 9
Breakpoint 0 activated at tmp2.hs:3:7-9
*Main> f undefined
Stopped at tmp2.hs:3:7-9
_result :: Int = _
a :: Int = _
g :: Int -> Int = _
[tmp2.hs:3:7-9] *Main>