[Haskell] "is Show" - как сдлать?
От: barn_czn  
Дата: 06.03.14 13:43
Оценка:
Хочу написать вот такое:

showUniversal :: a->String

Но при этом никак не ограничивать тип а.

Т.е. чтото вроде

showUniversal x = (Show x) => show x
showUniversal _ = undefined


Как? Каким образом внутри патерн матчинга проверить что переменная имплементирует класс Show ?
Re: [Haskell] "is Show" - как сдлать?
От: Code Digger Грузия  
Дата: 06.03.14 13:51
Оценка:
Здравствуйте, barn_czn, Вы писали:

_>Хочу написать вот такое:


_>showUniversal :: a->String


_>Но при этом никак не ограничивать тип а.


_>Т.е. чтото вроде


_>showUniversal x = (Show x) => show x

_>showUniversal _ = undefined


_>Как? Каким образом внутри патерн матчинга проверить что переменная имплементирует класс Show ?


Никаким. Вам не нужно этого делать.
На самом деле, Haskell — это не Java и не Python. Не пытайтесь вывернуть его наизнанку.
Re[2]: [Haskell] "is Show" - как сдлать?
От: barn_czn  
Дата: 06.03.14 14:18
Оценка:
Здравствуйте, Code Digger, Вы писали:

CD>Здравствуйте, barn_czn, Вы писали:


_>>Хочу написать вот такое:


_>>showUniversal :: a->String


_>>Но при этом никак не ограничивать тип а.


_>>Т.е. чтото вроде


_>>showUniversal x = (Show x) => show x

_>>showUniversal _ = undefined


_>>Как? Каким образом внутри патерн матчинга проверить что переменная имплементирует класс Show ?


CD>Никаким. Вам не нужно этого делать.

CD>На самом деле, Haskell — это не Java и не Python. Не пытайтесь вывернуть его наизнанку.

Причем тут Java? Я же не нарушаю строгую типизацию. Всего лишь хочу для одних входных данных возвращать одно, для других — другое.
Где тут наизнанку?
Re[3]: [Haskell] "is Show" - как сдлать?
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 06.03.14 16:00
Оценка: +2
Здравствуйте, barn_czn, Вы писали:

_>>>showUniversal x = (Show x) => show x

_>>>showUniversal _ = undefined
_>Причем тут Java? Я же не нарушаю строгую типизацию. Всего лишь хочу для одних входных данных возвращать одно, для других — другое.

А можно пример кода, где такая функция осмысленно используется? Ведь для типов не из Show вернуть что-то кроме undefined не выйдет, а нафига вызывающему может потребоваться этот undefined? Более того, относится ли тип аргумента к классу Show известно уже при вызове функции, поэтому результат подобного выбора предопределен еще до вызова.
Re: [Haskell] "is Show" - как сдлать?
От: BulatZiganshin  
Дата: 06.03.14 21:58
Оценка:
Здравствуйте, barn_czn, Вы писали:

_>showUniversal :: a->String

_>Но при этом никак не ограничивать тип а.

type classes? вообще каждое выражение в хаскеловской программе доолдно иметь конкретный тип или класс, причём вывод идёт в обе стороны (сверху вниз и снизу вверх). а у вас, судя по вопросам, простов вывихнутый взгляд на хаскел. надо вправить вывих чтобы перестать задаваться неправильными вопросами
Люди, я люблю вас! Будьте бдительны!!!
Re[2]: [Haskell] "is Show" - как сдлать?
От: barn_czn  
Дата: 08.03.14 08:45
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>Здравствуйте, barn_czn, Вы писали:


_>>showUniversal :: a->String

_>>Но при этом никак не ограничивать тип а.

BZ>type classes? вообще каждое выражение в хаскеловской программе доолдно иметь конкретный тип или класс, причём вывод идёт в обе стороны (сверху вниз и снизу вверх). а у вас, судя по вопросам, простов вывихнутый взгляд на хаскел. надо вправить вывих чтобы перестать задаваться неправильными вопросами


)) уважаемый, совет врача "вы больной, просто выздоравливайте" — говорит о том что плохой врач.
у меня вывих. ну так я и задаю вопросы чтобы вправить его.

теперь по сути.

haskell повзволяет мне написать функция без указания какого либо типа и класса.

showMy:: a->String

Но если так, то должны быть средства определять в рантайме инфу которая не была задана в момент компиляции.
Потому что иначе получится что он со своей строготипизированностью допускает нетепизированные функции.

От части я нашел уже ответ — это Typable.

Проще всего сказать "вам это не нужно". Незнаете — так не отвечайте, не тратьте время ни свое ни чужое.
Re[4]: [Haskell] "is Show" - как сдлать?
От: barn_czn  
Дата: 12.03.14 08:25
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Здравствуйте, barn_czn, Вы писали:


_>>>>showUniversal x = (Show x) => show x

_>>>>showUniversal _ = undefined
_>>Причем тут Java? Я же не нарушаю строгую типизацию. Всего лишь хочу для одних входных данных возвращать одно, для других — другое.

DM>А можно пример кода, где такая функция осмысленно используется? Ведь для типов не из Show вернуть что-то кроме undefined не выйдет, а нафига вызывающему может потребоваться этот undefined? Более того, относится ли тип аргумента к классу Show известно уже при вызове функции, поэтому результат подобного выбора предопределен еще до вызова.


вот здесь написано о том зачем, и как сделать
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.