[Moscow.pm] А почему не Perl?

ksvs ksvs1996 на ymail.com
Ср Апр 27 03:12:31 PDT 2016


Какой снобизм? Просто непонимание, почему, если без unsafePerformIO никуда, говорят о чистоте.

readFile говорите?

Открываем исходники bytestring-0.10.6.0 и видим.


hGetContentsN :: Int -> Handle -> IO ByteString
hGetContentsN k h = lazyRead -- TODO close on exceptions
  where
    lazyRead = unsafeInterleaveIO loop

    loop = do
        c <- S.hGetSome h k -- only blocks if there is no data available
        if S.null c
          then do hClose h >> return Empty
          else do cs <- lazyRead
                  return (Chunk c cs)

Есть и unsafeInterleaveIO, и даже комментарий есть.

А когда может прилететь exceptions? Когда чистой функции md5 потребуется следующая порция данных. В чистой функции exceptions. Это как?
Или считать, что exceptions в fmap, bind происходят?

Хотя, если считать, что отсутствие результата - это не результат, то да Haskell - чистый. А так он "Best Imperative Language", в котором для IO сделали красивую обертку.


P.S.
Что почитать посоветуете?


   

 On Wednesday, 27 April 2016, 11:26, Alexander Q <qalexx на gmail.com> wrote:
 

 за unsafePerformIO по такому поводу — билет на хедхантер в одну сторону, мне кажется.
Если md5 чистая функция Bytestring -> Bytestring, и у нас есть IO Bytestring какой-нибудь (readFile там), то мы делаем очевидный ходfmap md5 (readFile path)и вот смотри ка, даже упёртому должно быть понятно, что у наса) отделение IO от чистой логикиб) ровно то, что хочется на входе и выходе
Для перемножения матриц я рекомендую использовать unboxed вектора из библиотеки vector.
А ещё я предлагаю засунуть свой снобизм туда же, где ваши знания про функциональное программирование, и почитать хоть что нибудь уже. Вот даже цитату принёс:> Haskell is a pure language, which means that the result of any function call is fully determined by its arguments.
On Wed, Apr 27, 2016 at 9:47 AM ksvs <ksvs1996 на ymail.com> wrote:


unsafePerformIO
md5 - функция принимает на вход ленивую ByteString от файла и выдает Integer.
Чистая функция? Да. А внутри unsafePerformIO. :-)

Перемножить матрицы для скорости паралельно.
Тип функции :: матрица -> матрица -> матрица
Чистая функция, а внутри forkIO и unsafePerformIO.

От всем хорош haskell, только притворятся чистым языком.
:-)

 

    On Tuesday, 26 April 2016, 16:59, Alexander Q <qalexx на gmail.com> wrote:
 
 > На ум приходит посчитать md5, но а если файла, то его целиком читать в память  не оптимально, то это уже кондуиды, и на каждую порцию получаем IO в алгоритме.
Отличное условие. Посчитать функцию от (IO a) без IO? Будьте добры, спойте "ёлочку", не набирая воздух в течение получаса.   --
Moscow.pm mailing list
moscow-pm на pm.org | http://moscow.pm.org


-- 
Moscow.pm mailing list
moscow-pm на pm.org | http://moscow.pm.org


   
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20160427/ad6ab6cd/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm