[Haskell] распечатать выведенный тип функции
От: Andir Россия
Дата: 30.01.09 14:33
Оценка:
Привет, RSDN!

Есть какая-нибудь возможность cделать в откомпилированной программе то, что делает :t в ghci (выводит на консоль тип функции)? Хочется попользовать для целей print-like отладки

С Уважением, Andir!
using( RSDN@Home 1.2.0 alpha 4 rev. 1135 ) { /* Работаем */ }
Re: [Haskell] распечатать выведенный тип функции
От: Курилка Россия http://kirya.narod.ru/
Дата: 30.01.09 14:37
Оценка:
Здравствуйте, Andir, Вы писали:

A>Привет, RSDN!


A>Есть какая-нибудь возможность cделать в откомпилированной программе то, что делает :t в ghci (выводит на консоль тип функции)? Хочется попользовать для целей print-like отладки


А как ты себе это представляешь?
Рефлексию чтоли хочешь и выдавать типы переменных?
Как-то оно криво для Хаскеля, могу только предложить с Data.Typeable поиграть, но сомневаюсь что это то, что ты хочешь.
Чего-то противоестественного хочешь по-моему.
Re: [Haskell] распечатать выведенный тип функции
От: thesz Россия http://thesz.livejournal.com
Дата: 30.01.09 14:56
Оценка: +1
A>Есть какая-нибудь возможность cделать в откомпилированной программе то, что делает :t в ghci (выводит на консоль тип функции)?

Нет.

A>Хочется попользовать для целей print-like отладки


Используй REPL, целее будешь.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[2]: [Haskell] распечатать выведенный тип функции
От: Andir Россия
Дата: 30.01.09 15:10
Оценка:
Здравствуйте, Курилка, Вы писали:

A>>Есть какая-нибудь возможность cделать в откомпилированной программе то, что делает :t в ghci (выводит на консоль тип функции)? Хочется попользовать для целей print-like отладки


К>А как ты себе это представляешь?

К>Рефлексию чтоли хочешь и выдавать типы переменных?

Да без разницы хоть внутреннее GHC API, хоть рефлексию, хоть какие хинты компилятору подкинуть.
Также возможно меня бы устроила и какая-нибудь мини-программка, которая пропускает исходник hs через себя и выводит все типы функций модуля.

К>Как-то оно криво для Хаскеля, могу только предложить с Data.Typeable поиграть, но сомневаюсь что это то, что ты хочешь.

К>Чего-то противоестественного хочешь по-моему.

Что противоестественного в желании узнать выведенные компилятором типы? GHCi же это делает, а значит практически ничего не мешает это сделать.

С Уважением, Andir!
using( RSDN@Home 1.2.0 alpha 4 rev. 1135 ) { /* Работаем */ }
Re: [Haskell] распечатать выведенный тип функции
От: BulatZiganshin  
Дата: 30.01.09 16:07
Оценка:
Здравствуйте, Andir, Вы писали:

A>Привет, RSDN!


A>Есть какая-нибудь возможность cделать в откомпилированной программе то, что делает :t в ghci (выводит на консоль тип функции)? Хочется попользовать для целей print-like отладки


через рефлексию должна быть, через TH тоже

сложного ничего нет:
class Type a where
  typeof :: a -> String
instance Type String where
  typeof _ = "String"
instance Type Int where
  typeof _ = "Int"
instance (Type a) => Type [a] where
  typeof x = "["++typeof (head x)++"]"
instance (Type a, Type b) => Type (a,b) where
  typeof (x,y) = "("++typeof x++","++typeof y++")"
main = print$ typeof ("",("",[""]))


deriving (Data) генерит инстансы, которые в частности и это должны позволять делать
Люди, я люблю вас! Будьте бдительны!!!
Re[3]: [Haskell] распечатать выведенный тип функции
От: Andir Россия
Дата: 30.01.09 16:25
Оценка:
Здравствуйте, Andir, Вы писали:

A>Также возможно меня бы устроила и какая-нибудь мини-программка, которая пропускает исходник hs через себя и выводит все типы функций модуля.


О, это я таки нашёл.

-ddump-types:

Dump a type signature for each value defined at the top level of the module. The list is sorted alphabetically. Using -dppr-debug dumps a type signature for all the imported and system-defined things as well; useful for debugging the compiler.

via http://www.haskell.org/ghc/docs/latest/html/users_guide/options-debugging.html

С Уважением, Andir!
using( RSDN@Home 1.2.0 alpha 4 rev. 1135 ) { /* Работаем */ }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.