2015-04-30 3 views
4

Можно ли найти тип функций, определенных в заявлении с GHCI?Как найти тип подфункций с GHCI

Например, рассматривая эту функцию:

myFunction a b c = case result of 
        2 -> ... 
          where 
            subFunctA = ... 
        _ -> ... 
          where 
            subFunctB = ... 
            subFunctC = ... 

Тип myFunction можно найти с :t myFunction.

Возможно ли найти типы subFunctA, subFuncB и subFunctC с GHCI?

ответ

2

Вы можете попробовать использовать typed holes, если у вас есть достаточно новая версия GHCi.

В принципе, если вы пишете символ подчеркивания в коде, компилятор выплюнет сообщение об ошибке, сообщающее вам, какой тип подвыражения должен иметь. В вашем примере просто замените «...» на «_».

2

№ GHCi не имеет доступа к источнику своих функций. Это верно, даже если вы определили функцию самостоятельно в GHCi или в исходном файле.

В качестве альтернативы: поскольку у вас есть доступ к источнику интересующей вас функции, вы можете скопировать функции в глобальную область вашего исходного файла, скомпилировать их и посмотреть, какой тип GHC присваивает им. Я делаю это много. (Кроме того, вы можете вставлять их непосредственно в GHCi.) Как только вы это сделаете, вы можете вызвать: t на них все, что вы хотите. Это приводит к риску создания более общих типов, чем фактические подфункции, но это все равно может помочь вам.

Смежные вопросы