Aktywne Wpisy
![JoMaHaa](https://wykop.pl/cdn/c3397992/JoMaHaa_LrJLQQDEFR,q60.jpg)
JoMaHaa +1139
Mirki, co to się to ja nie...
Robię na sortowni w #inpost patrzę po taśmie jedzie paczka z napisem, że w środku jest bomba, no to ja taśma stop, wciskam ROP caly obsrany juz jestem, bo to na tych tasmach sie ciagle paczki obijają, całą hale ewakuujemy, dzwonie na bagiety, szybko przyjechali saperzy z tym swoim robocikiem, otwierają to a tam skarpety i Merci...
Teraz bagiety szukają tego śmieszka plus dyrektor kontaktuje
Robię na sortowni w #inpost patrzę po taśmie jedzie paczka z napisem, że w środku jest bomba, no to ja taśma stop, wciskam ROP caly obsrany juz jestem, bo to na tych tasmach sie ciagle paczki obijają, całą hale ewakuujemy, dzwonie na bagiety, szybko przyjechali saperzy z tym swoim robocikiem, otwierają to a tam skarpety i Merci...
Teraz bagiety szukają tego śmieszka plus dyrektor kontaktuje
![Nacho_Libre](https://wykop.pl/cdn/c3397992/Nacho_Libre_jhU0pY8mcs,q60.jpg)
Nacho_Libre +25
#sluchamzlastfm #sluchamzlastfm2 #muzyka #spotify #lastfm
Dzień dobry,
W ten niedzielny poranek zapraszam do cotygodniowego Waszego zestawienia najczęściej słuchanych albumów w serwisie last.fm w kończącym się tygodniu.
Słucham z last.fm - Notowanie: 560 - 10 grudnia 2023
♪┌|∵|┘
Doskonale wiecie co robić, ale dla przypomnienia ;)
1. Wejść tutaj: http://tapmusic.net/lastfm lub tutaj: http://www.nsfcd.com/lastfm lub https://lastcollage.io/,
2. Wpisać swoją nazwę użytkownika w serwisie last.fm.
3. Następnie wybrać "7 days", gdyż zestawienie będzie z
Dzień dobry,
W ten niedzielny poranek zapraszam do cotygodniowego Waszego zestawienia najczęściej słuchanych albumów w serwisie last.fm w kończącym się tygodniu.
Słucham z last.fm - Notowanie: 560 - 10 grudnia 2023
♪┌|∵|┘
Doskonale wiecie co robić, ale dla przypomnienia ;)
1. Wejść tutaj: http://tapmusic.net/lastfm lub tutaj: http://www.nsfcd.com/lastfm lub https://lastcollage.io/,
2. Wpisać swoją nazwę użytkownika w serwisie last.fm.
3. Następnie wybrać "7 days", gdyż zestawienie będzie z
Chciałbym pokazać, że przydają się także, kiedy uskuteczniamy klasyczne #programowanie. Dodatkowo wołam @archlinuxuser bo chciałeś zobaczyć jak ten koncept wytłumaczę:
http://blog.radoszewski.pl/programming/scala/2015/05/31/mighty-monad.html
Post po angielsku, ale pisany językiem raczej prostym (i prawdopodobnie z błędami ;)). Zapraszam i miłej lektury!
Dodatkowo proszę mirków od #haskell aby przyjrzeli się moim przykładom i sprawdzili, czy nie walnąłem tam czegoś głupiego - Haskell nie jest moim natywnym językiem ;)
Przykłady kodu w #scala, ale są bardzo proste do zrozumienia dla każdego kto programuje.
@medevacs: nie :) czemu pytasz?
Co do wołania Mirków od #haskell - nie jestem prawdziwym haskellfagiem (quicksort to szczyt moich możliwości aktualnie), ale spróbuję:
a) wydaje mi się, że z treści artykułu trochę za bardzo wynika powiązanie monad z kolejnością operacji i stanem, na co prawdziwi Haskellowcy by się
map
. Owszem, te typy, których tam używasz, są monadyczne, ale to jest zbieg okoliczności, i tej monadyczności nie wykorzystujesz w tym przykładzie wcale.No
@jaen: Mam wrażenie, że każdy artykuł o monadach będzie miał coś co nie spodoba się haskellowcom :) Głównie dlatego, że monady to dość skomplikowane twory, nawet jeśli ich używanie jest w zasadzie proste. W artykule piszę o tym, że w
@moriturius: Sorry, ale to jest zwykłe złożenie funkcji.
Swoją drogą, w przykładzie
def main(): Unit = getChar.flatMap(putChar)
coś jakby się typy nie zgadzały.getChar.flatMap(putChar)
ma być typuCośtam[Unit]
, gdyby było typuUnit
, to program byłby - w sensie funkcyjnym - pusty.@frax: No trudno, szkoda.
@frax: Jeśli patrzysz na to funkcyjnie to - tak, nie zgadzają się. W Scali jednak taki program się skompiluje bez problemów bo jeśli funkcja jest typu
Unit
to wszystko jedno co zwraca.def main(): Unit = getChar.flatMap(putChar)()
?
Na moje oko (nieobyte ze scalą, przyznaję) twój przykład odpowiada haskellowemu
main = return $ getChar >>= putChar
Costam[B]
, bo przecież może być funkcją? W każdym razie, zachodzi jedno z dwóch:a)
Costam[B]
jest funkcją lub opakowaną funkcją - i wtedy wyliczenie wartościgetChar.flatMap(putChar)
nie ma skutów ubocznych, a dopierogetChar.flatMap(putChar)()
je ma.b)
Costam[B]
nie jest funkcją i jego wyliczenie (wykonanieflatMap
) ma skutki uboczne, ale wtedy jest całkiem przerypane, bo takieflatMap
nie spełnia praw monadycznych dla operacjigetChar
flatMap
wcale nie jest monadą.Swoją drogą, warto byłoby zauważyć, że jeden typ danych może potencjalnie być monadą na różne sposoby, tzn. z różnie zdefiniowanymi
return
i>>=
czy teżunit
iflatMap
.Gdyby wszystkie były zdefiniowane tak samo to mielibyśmy tylko jedna monade :)
getChar.flatMap
ma być prawidłową funkcją bind, to nie może mieć skutków ubocznych (bo musi być przemienna).getChar.flatMap
jest jedyną funkcją wywołaną przez twoją funkcjęmain
, zatemmain
nie ma skutków ubocznych. QED