Сейчас, о достопочтенные граждане, я восстановлю баланс во вселенной:
Prelude> ff = id . undefined
Prelude> :t ff
ff :: a -> c
В общем, выражение (id. undefined) имеет тип «ff :: a -> c» а не «undefined» как может показаться на первый взгляд.
Так что id возвращает то что должно.
Ок. Как я уже говорил, я не волшебник а только учусь. Про функторы, аппликативные функторы и монады я более менее нормально прочитал в «Learn you a haskell for a great god» вот в этой главе.
Рассмотрим для простоты функтор.
Функтор имеет всего один метод:
fmap :: (a -> b) -> f a -> f b
— то есть, берёт функцию и параметр, обёрнутый во что либо, достаёт параметр, применяет к нему функцию и оборачивает обратно.
Также, функтор имеет два свойства:
если применить fmap к функции id и функтору, то получим тоже самое значение, что получили бы просто применив id к функтору
если к результату композиции двух функций применить fmap с функтором, результат будет тот же, если мы сначала применим fmap с фуктором к одной функции, затем к другой
Скажите, пожалуйста, где здесь условность?
Оба свойства чётко определены, мы можем спокойно написать функцию, которая может проверить любой объект, реализующий fmap на предмет — «а не функтор ли ты часом ?» и дать точный ответ на этот вопрос.
С MVC так не выйдет )).
Насколько понимаю, реализация действительно не регламентируется, зато чётко заданы свойства, из которых следуют различные следствия.
То есть, если объект имеет определённые чётко заданные свойства — мы можем назвать его функтором, из чего следуют всякие полезности, свойственные этим самым функторам.
У того же паттерна MVC нет чётко заданных свойств и нельзя тупо взять, проделать с двумя разными реализациями паттернов одинаковые действия и получить одинаковый результат.
Но я в этих вещах нуб, могу ошибаться.
Ну если так то да, согласен. Вакансий таких раз два и обчёлся, плюс, знаний для написания чего то покрупнее нужно «чуть» больше чем умение пользоваться монадами.
По поводу «никто не знает, что такое каноничный MVC» вспомнился мне коллега, который пытался объяснить что его понимание паттерна — самое верное и view с контроллером обязан взаимодействовать вот так, и никак иначе!
Спасибо. «Learn you a Haskell...» освоен, частично ознакомился с «Real world Haskell».
Насчёт практической применимости не соглашусь. Уже сейчас пытаюсь использовать его как скриптовый язык для собственных маленьких потребностей.
В этом качестве нравится тем, что можно скомпилить исполняемый файл под любую десктопную платформу, и не нужно потом на целевой машине что то там устанавливать дополнительно.
Раньше пользовал для этой цели Питон, но он не нравится по вышеуказанной причине.
Ну, меня ФП как раз привлекло возможностью «посмотреть на программирование с другой стороны». Проходили их в универе, и даже немного писали на Лиспе, но тогда как то не проникся.
Сейчас приобщаюсь потихоньку и ощущения примерно те же что от книги Гради Буча, прочитанной взахлёб ещё в далёком 2003м.
Согласен, пихать pointfree куда ни попадя не очень хорошо. Во всём нужна мера )
Вот, за что я люблю Хабр, так это за комментарии. Если задать правильный вопрос, сразу получишь тонну интересного )).
Я правильно понял, что, упрощённо говоря, Idris это Хаскель скрещённый с Прологом?
Раз уж пошла такая пьянка, не подскажете, где можно найти материалы для переформатирования сознания в pointfree и декларативный стиль программирования?
Начал недавно изучать Haskell и очень не хватает какого то списка best practices. Большинство материалов либо учат основам языка, либо их применению, но переход мышления на функциональные рельсы происходит очень медленно, на мой взгляд.
Для такого ещё надо качественное кино снять. Технологии впаривания всякого шлака в настоящий момент развиты лучше, чем технологии кинопроизводства.
Поэтому проще впарить половине планеты какую нибудь тупую хрень.
Тоже пытался перейти на лицензионное. С ПО получается — пользуюсь либо покупным либо открытым. Причём это реально удобно. Тот же Steam в плане игр, например, мне гораздо удобней разок заплатить и пользоваться в своё удовольствие, чем мучиться с кряками.
А вот с медиа сложнее — там до сих пор проще с торрентов скачать.
Да и сейчас же известно что модели и знаменитости используют косметику/пластику, их снимают с правильным светом, продумывают композицию и стиль, фотошопят — это не секрет. Однако, стандарты красоты диктуют они.
Предположим, появилась мега популярная виртуальная инстаграмщица с какой нибудь, не соответствующей реальным человекам, фишкой.
Далее не трудно представить как эту фишку начнут копировать и пытаться быть похожей. У кого то даже получится очень близко к оригиналу. Далее — куча подражателей в реале и переживающих модниц, которые не смогут себе такое позволить.
Как я понял, это прототип пока, непонятно как работающий. Видео можно всякое сейчас снять ).
Обещают к 2021му году управиться.
А тут перечислены вещи, которые можно купить вот прямо сейчас.
В общем, выражение (id. undefined) имеет тип «ff :: a -> c» а не «undefined» как может показаться на первый взгляд.
Так что id возвращает то что должно.
Рассмотрим для простоты функтор.
Функтор имеет всего один метод: — то есть, берёт функцию и параметр, обёрнутый во что либо, достаёт параметр, применяет к нему функцию и оборачивает обратно.
Также, функтор имеет два свойства:
Скажите, пожалуйста, где здесь условность?
Оба свойства чётко определены, мы можем спокойно написать функцию, которая может проверить любой объект, реализующий fmap на предмет — «а не функтор ли ты часом ?» и дать точный ответ на этот вопрос.
С MVC так не выйдет )).
То есть, если объект имеет определённые чётко заданные свойства — мы можем назвать его функтором, из чего следуют всякие полезности, свойственные этим самым функторам.
У того же паттерна MVC нет чётко заданных свойств и нельзя тупо взять, проделать с двумя разными реализациями паттернов одинаковые действия и получить одинаковый результат.
Но я в этих вещах нуб, могу ошибаться.
Думаю, такое всё таки тренируется постоянной практикой.
Насчёт практической применимости не соглашусь. Уже сейчас пытаюсь использовать его как скриптовый язык для собственных маленьких потребностей.
В этом качестве нравится тем, что можно скомпилить исполняемый файл под любую десктопную платформу, и не нужно потом на целевой машине что то там устанавливать дополнительно.
Раньше пользовал для этой цели Питон, но он не нравится по вышеуказанной причине.
Сейчас приобщаюсь потихоньку и ощущения примерно те же что от книги Гради Буча, прочитанной взахлёб ещё в далёком 2003м.
Согласен, пихать pointfree куда ни попадя не очень хорошо. Во всём нужна мера )
Я правильно понял, что, упрощённо говоря, Idris это Хаскель скрещённый с Прологом?
Начал недавно изучать Haskell и очень не хватает какого то списка best practices. Большинство материалов либо учат основам языка, либо их применению, но переход мышления на функциональные рельсы происходит очень медленно, на мой взгляд.
Поэтому проще впарить половине планеты какую нибудь тупую хрень.
А вот с медиа сложнее — там до сих пор проще с торрентов скачать.
Срочно вводите в оборот и пишите диссертацию!
Предположим, появилась мега популярная виртуальная инстаграмщица с какой нибудь, не соответствующей реальным человекам, фишкой.
Далее не трудно представить как эту фишку начнут копировать и пытаться быть похожей. У кого то даже получится очень близко к оригиналу. Далее — куча подражателей в реале и переживающих модниц, которые не смогут себе такое позволить.
Обещают к 2021му году управиться.
А тут перечислены вещи, которые можно купить вот прямо сейчас.