1. Куча / Говнокод #12155

    +117

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    data Pitch = Pitch Integer
    
    pitch t o = Pitch (o*12 + t)
    
    freq (Pitch p) = a4 * 2**(i/12) where
    	i = fromIntegral (p - 57)
    	a4 = 440

    Запостил: Fai, 20 Ноября 2012

    Комментарии (46) RSS

    • показать все, что скрытоКто догадается, что делает код - молодец.
      Ответить
      • o - октава
        t - нота от 0 до 12
        Считает частоту.
        Ответить
        • s/12/11/
          Ответить
        • показать все, что скрытоМолодец.
          Ответить
          • Кстати, почему нету show? Неудобный же тип, если его нельзя показать.
            Ответить
            • Есть, я кусок вырезал. Там вообще модуль на 200 строк, позволяющий записывать список нот в "удобочитаемой" форме и затем экспортировать в многотрековый midi-файл.
              Ответить
              • Думаю, тебе имеет смысл взглянуть на это
                https://github.com/overtone/overtone
                Ответить
      • Я тоже сразу догадался. Это не Haskore какой-нибудь?
        Кстати, Pitch лучше бы newtype.
        Ответить
        • А какие newtype имеет преимущества в данном случае?
          Ответить
          • Да поидее никаких, имхо оптимизатор сам догадается, что data с одним вариантом и одним элементом это и есть newtype.
            Ответить
            • Строго говоря, есть отличия, связанные со строгостью и жопой: http://www.haskell.org/haskellwiki/Newtype
              но я решительно не представляю, где они могут на практике пригодиться.
              По идее, с достаточно умным компилятором отдельный newtype вообще не нужен.
              Ответить
              • А, вот оно че. У data две жопы - своя, и от вложенного типа. Спасибо за ссылку.
                Ответить
                • Что значит две жопы?
                  Ответить
                  • Ну т.е. если мы описали data Pitch = Pitch Int, и у нас есть какая-то переменная p :: Pitch, то:
                    во-первых жопа (⊥) может таиться в самой переменной p. (p = undefined);
                    во-вторых жопа может находиться внутри Pitch'а (p = Pitch undefined).

                    С ньютайпом же Pitch undefined это просто undefined.
                    Ответить
                    • Хм. Спасибо за разъяснения.

                      Пользуясь случаем хочу спросить, куда мне дальше копать в хаскеле?

                      Если "Learn you a haskell" и "Real World Haskell" уже осилил, но считаю, что что-то серьезное на хаскеле писать тяжело при моих навыках.
                      Ответить
                      • Попробуй что нибудь написать. Для начала можно порешать задачки с проекта эйлера. Потом какой нибудь несложный проект. А книжки без практики, имхо, бесполезны...
                        Ответить
                        • Ну я практикуюсь, написал уже текстовую жизнь, генератор лабиритнов и вот эту недолибу.

                          Еще написал корявую версию words на своей корявой реализации монады State. Вообще ничего серьезного, но quickCheck'ом проверил - полное соответствие между моей и стандартной функцией.

                          Потом еще расширил до лексического анализатора (разделял имена, числа и операторы).

                          Попробую Project Euler, а вот проект какой начать потом даже не знаю... Все, что лезет в голову либо слишком сложно либо, наоборот, слишком просто.
                          Ответить
                          • >а вот проект какой начать потом даже не знаю
                            А теперь найди работу за которую платят деньги.
                            Проблемы "чего бы еще написать?" сразу отпадут.
                            По ходу дела станёт ясно что нужно, а что нет.
                            Ответить
                            • > А теперь найди работу за которую платят деньги.
                              Золотые слова.
                              Ответить
                            • Идти писать продакшн-хаскель-код, при том, что я плохо язык знаю?

                              Ладно, пойду устраиваться в контору мазохистов, набирающих хаскель-программистов.
                              Ответить
                              • > в контору мазохистов, набирающих хаскель-программистов
                                Как найдёшь - дай наводочку ;)
                                Ответить
                                • > Как найдёшь - дай наводочку ;)
                                  Ага, и мне тоже до кучи.
                                  Ответить
                          • Внесу свои пять копеек.

                            Попробуй начать использовать Haskell для решения повседневных задач и автоматизации рутины, это должно довольно быстро придать уверенности и принести немало приятных минут.

                            Во всяком случае, так бы поступил я сам, будь у меня такая возможность. Поскольку мне приходится работать с кодом, который придётся ковырять потенциально большому количеству разработчиков, мой основной инструмент автоматизации рутины и упрощения кода - python. Правда, хаскелевской системы типов сильно не хватает.
                            Ответить
                            • Нужно уже скрестить фичи хаскела и удобство питона, получив... Hathon. Ну или Pyskell.

                              Правда в питоне уже сейчас можно писать функциональщину.
                              Ответить
                              • c версии 5.3 функцианальщину можно и на php
                                Ответить
                                • Ну все! Бросаю говнохаскель и иду писать на православном ПэХаПэ
                                  Ответить
                                  • отчего то мне мнится что php 6.0 так и не родится. Завалится по тяжестью понапиханого в него дерьма. Если на работе то можно и пыхать а для души то лучше рельсы или питон. Ну или хаскель, хотя хаскель это только для души никакого профита.
                                    Ответить
                                    • Для работы - C#/Java.
                                      Для души - F#/Scala.
                                      Ответить
                                    • >Ну или хаскель, хотя хаскель это только для души никакого профита.

                                      Зато расширяет сознание круче любых веществ.
                                      Ответить
                                      • Расширяет, но не круче.
                                        Ответить
                                        • вывод типов круче в хаскеле
                                          если из модуля не экспортировать, то и указывать не нужно нигде. такого уровня вывода типов нигде нет
                                          а твой фшарп - имеет говновывод типов, а скала вообще это умеет не лучше сишарпа, что для функционального языка просто позор
                                          Ответить
                                      • хаскель не для души, а для душевно
                                        Ответить
                              • Думаю, "Пускель" зарегистрировали мелкософтовцы для функционального скриптового языка работы с кнопкой в левом нижнем углу.

                                Придётся брать имя "Пукель" (Pykell)
                                Ответить
                                • Бурленд Пускель
                                  Ответить
                                • А чем не нравится "Хатон" (Hathon)? Или даже "Хаскон" (Haskon)?

                                  Понимаю, не тк благозвучно как Пускель, но зато мелкософт не придирется.
                                  Ответить
                            • > мой основной инструмент автоматизации рутины и упрощения кода - python
                              А поподробнее можно? Какие вещи автоматизируются?
                              Это как удобная замена башу?
                              Ответить
                              • Сейчас в основном пишу несложные джобы, которые можно повесить в крон, преобразователи данных. Вот недавно либу написал для этих целей https://github.com/roman-kashitsyn/redmate

                                Использую redis-py из питоньей консоли в качестве основного redis-cli клиента.

                                Возможно, запилим на нём автоматизированный конфигуратор.
                                Ответить

    Добавить комментарий