<div dir="ltr">за unsafePerformIO по такому поводу — билет на хедхантер в одну сторону, мне кажется.<div><br></div><div>Если md5 чистая функция Bytestring -> Bytestring, и у нас есть IO Bytestring какой-нибудь (readFile там), то мы делаем очевидный ход</div><div>fmap md5 (readFile path)</div><div>и вот смотри ка, даже упёртому должно быть понятно, что у нас</div><div>а) отделение IO от чистой логики</div><div>б) ровно то, что хочется на входе и выходе</div><div><br></div><div>Для перемножения матриц я рекомендую использовать unboxed вектора из библиотеки <a href="https://hackage.haskell.org/package/vector">vector</a>.</div><div><br></div><div>А ещё я предлагаю засунуть свой снобизм туда же, где ваши знания про функциональное программирование, и почитать <a href="https://wiki.haskell.org/IO_inside">хоть что нибудь</a> уже. Вот даже цитату принёс:</div><div>> Haskell is a pure language, which means that the result of any function call is fully determined by its arguments.</div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Apr 27, 2016 at 9:47 AM ksvs <<a href="mailto:ksvs1996@ymail.com">ksvs1996@ymail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="color:#000;background-color:#fff;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,Sans-Serif;font-size:10px"><br><div dir="ltr"><font size="3"><font size="3">unsafePerformIO</font></font></div><div dir="ltr"><font size="3"><font size="3"><br></font></font></div><font size="3">md5 - функция принимает на вход ленивую ByteString от файла и выдает Integer.<br clear="none">Чистая функция? Да. А внутри unsafePerformIO. :-)<br clear="none"><br clear="none">Перемножить матрицы для скорости паралельно.<br clear="none">Тип функции :: матрица -> матрица -> матрица<br clear="none">Чистая функция, а внутри forkIO и unsafePerformIO.<br clear="none"><br clear="none"></font><div dir="ltr"><font size="3">От всем хорош haskell, только притворятся чистым языком.</font></div><div dir="ltr"><font size="3"><br clear="none"></font></div><div dir="ltr"><font size="3">:-)<br clear="none"></font></div></div></div><div><div style="color:#000;background-color:#fff;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,Sans-Serif;font-size:10px"><div dir="ltr"><div dir="ltr"><br clear="none"></div></div><div><span></span></div> <div><br><br></div><div style="display:block"> <div style="font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,Sans-Serif;font-size:10px"> <div style="font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,Sans-Serif;font-size:16px"> <div dir="ltr"><font face="Arial" size="2"> On Tuesday, 26 April 2016, 16:59, Alexander Q <<a href="mailto:qalexx@gmail.com" target="_blank">qalexx@gmail.com</a>> wrote:<br></font></div>  <br> <div><div><div dir="ltr">> На ум приходит посчитать md5, но а если файла, то его целиком читать в память  не оптимально, то это уже кондуиды, и на каждую порцию получаем IO в алгоритме.<div><span style="line-height:1.5"><br></span></div><div><span style="line-height:1.5">Отличное условие. Посчитать функцию от (IO a) без IO? Будьте добры, спойте "ёлочку", не набирая воздух в течение получаса.</span></div></div></div></div>  </div> </div>  </div></div></div>--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
</blockquote></div>