Здравствуйте, barn_czn, Вы писали:
_>Хочу написать вот такое:
_>showUniversal :: a->String
_>Но при этом никак не ограничивать тип а.
_>Т.е. чтото вроде
_>showUniversal x = (Show x) => show x _>showUniversal _ = undefined
_>Как? Каким образом внутри патерн матчинга проверить что переменная имплементирует класс Show ?
Никаким. Вам не нужно этого делать.
На самом деле, Haskell — это не Java и не Python. Не пытайтесь вывернуть его наизнанку.
Здравствуйте, Code Digger, Вы писали:
CD>Здравствуйте, barn_czn, Вы писали:
_>>Хочу написать вот такое:
_>>showUniversal :: a->String
_>>Но при этом никак не ограничивать тип а.
_>>Т.е. чтото вроде
_>>showUniversal x = (Show x) => show x _>>showUniversal _ = undefined
_>>Как? Каким образом внутри патерн матчинга проверить что переменная имплементирует класс Show ?
CD>Никаким. Вам не нужно этого делать. CD>На самом деле, Haskell — это не Java и не Python. Не пытайтесь вывернуть его наизнанку.
Причем тут Java? Я же не нарушаю строгую типизацию. Всего лишь хочу для одних входных данных возвращать одно, для других — другое.
Где тут наизнанку?
Здравствуйте, barn_czn, Вы писали:
_>>>showUniversal x = (Show x) => show x _>>>showUniversal _ = undefined _>Причем тут Java? Я же не нарушаю строгую типизацию. Всего лишь хочу для одних входных данных возвращать одно, для других — другое.
А можно пример кода, где такая функция осмысленно используется? Ведь для типов не из Show вернуть что-то кроме undefined не выйдет, а нафига вызывающему может потребоваться этот undefined? Более того, относится ли тип аргумента к классу Show известно уже при вызове функции, поэтому результат подобного выбора предопределен еще до вызова.
Здравствуйте, barn_czn, Вы писали:
_>showUniversal :: a->String _>Но при этом никак не ограничивать тип а.
type classes? вообще каждое выражение в хаскеловской программе доолдно иметь конкретный тип или класс, причём вывод идёт в обе стороны (сверху вниз и снизу вверх). а у вас, судя по вопросам, простов вывихнутый взгляд на хаскел. надо вправить вывих чтобы перестать задаваться неправильными вопросами
Здравствуйте, BulatZiganshin, Вы писали:
BZ>Здравствуйте, barn_czn, Вы писали:
_>>showUniversal :: a->String _>>Но при этом никак не ограничивать тип а.
BZ>type classes? вообще каждое выражение в хаскеловской программе доолдно иметь конкретный тип или класс, причём вывод идёт в обе стороны (сверху вниз и снизу вверх). а у вас, судя по вопросам, простов вывихнутый взгляд на хаскел. надо вправить вывих чтобы перестать задаваться неправильными вопросами
)) уважаемый, совет врача "вы больной, просто выздоравливайте" — говорит о том что плохой врач.
у меня вывих. ну так я и задаю вопросы чтобы вправить его.
теперь по сути.
haskell повзволяет мне написать функция без указания какого либо типа и класса.
showMy:: a->String
Но если так, то должны быть средства определять в рантайме инфу которая не была задана в момент компиляции.
Потому что иначе получится что он со своей строготипизированностью допускает нетепизированные функции.
От части я нашел уже ответ — это Typable.
Проще всего сказать "вам это не нужно". Незнаете — так не отвечайте, не тратьте время ни свое ни чужое.
Здравствуйте, D. Mon, Вы писали:
DM>Здравствуйте, barn_czn, Вы писали:
_>>>>showUniversal x = (Show x) => show x _>>>>showUniversal _ = undefined _>>Причем тут Java? Я же не нарушаю строгую типизацию. Всего лишь хочу для одних входных данных возвращать одно, для других — другое.
DM>А можно пример кода, где такая функция осмысленно используется? Ведь для типов не из Show вернуть что-то кроме undefined не выйдет, а нафига вызывающему может потребоваться этот undefined? Более того, относится ли тип аргумента к классу Show известно уже при вызове функции, поэтому результат подобного выбора предопределен еще до вызова.