Привет, RSDN!
Есть какая-нибудь возможность cделать в откомпилированной программе то, что делает :t в ghci (выводит на консоль тип функции)? Хочется попользовать для целей print-like отладки
С Уважением, Andir!
using( RSDN@Home 1.2.0 alpha 4 rev. 1135 ) { /* Работаем */ }
Здравствуйте, Andir, Вы писали:
A>Привет, RSDN!
A>Есть какая-нибудь возможность cделать в откомпилированной программе то, что делает :t в ghci (выводит на консоль тип функции)? Хочется попользовать для целей print-like отладки
А как ты себе это представляешь?
Рефлексию чтоли хочешь и выдавать типы переменных?
Как-то оно криво для Хаскеля, могу только предложить с Data.Typeable поиграть, но сомневаюсь что это то, что ты хочешь.
Чего-то противоестественного хочешь по-моему.
A>Есть какая-нибудь возможность cделать в откомпилированной программе то, что делает :t в ghci (выводит на консоль тип функции)?
Нет.
A>Хочется попользовать для целей print-like отладки
Используй REPL, целее будешь.
Здравствуйте, Курилка, Вы писали:
A>>Есть какая-нибудь возможность cделать в откомпилированной программе то, что делает :t в ghci (выводит на консоль тип функции)? Хочется попользовать для целей print-like отладки
К>А как ты себе это представляешь?
К>Рефлексию чтоли хочешь и выдавать типы переменных?
Да без разницы хоть внутреннее GHC API, хоть рефлексию, хоть какие хинты компилятору подкинуть.
Также возможно меня бы устроила и какая-нибудь мини-программка, которая пропускает исходник hs через себя и выводит все типы функций модуля.
К>Как-то оно криво для Хаскеля, могу только предложить с Data.Typeable поиграть, но сомневаюсь что это то, что ты хочешь.
К>Чего-то противоестественного хочешь по-моему.
Что противоестественного в желании узнать выведенные компилятором типы? GHCi же это делает, а значит практически ничего не мешает это сделать.
С Уважением, Andir!
using( RSDN@Home 1.2.0 alpha 4 rev. 1135 ) { /* Работаем */ }
Здравствуйте, 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) генерит инстансы, которые в частности и это должны позволять делать
Здравствуйте, 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 ) { /* Работаем */ }