Какой снобизм? Просто непонимание, почему, если без 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 <[email protected]> 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 <[email protected]> wrote:


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

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

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

 

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


-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org


   
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить