1. Scalaz is a Scala library that provides functional data structures and type classes to complement the standard library. It defines foundational type classes like Functor, Monad, and provides instances for many data types.
2. The document discusses several Scalaz type classes - Equal, Semigroup, Monoid, Functor, Applicative, Monad, and Validation. It provides examples of how to use these type classes to define instances for types like Int, List, Option, etc.
3. Using Scalaz allows functional programming with types like Validation that encapsulate errors in a pure way, avoiding side effects from exceptions. It also provides syntactic sugar like |+| and <*> to make
13 års erfaring som java-utvikler -> konsulent siden 2005 Java, Scala, HTML/js
har mange ganger tenkt at “eg må se på scalaz” for det er kult -> men liksom aldri kommet i gang
Mye er endret i versjon 7. lite unicode-metodenavn strukturen er bedre og mer lagvis
Hva pushet meg over kanten? Laget en applikasjon med Unfiltered som et json-api Ikke et godt REST-api, så ingen kommentarer om det ;)
med json4s (eller lift-json) denne koden har (minst) ett problem - en ting vi ikke kontrollerer...
“ Spring+commons-lang måten” -> kaster IllegalArgumentException hvis brutt..
live demo i Postman!
Mange grunner til det... -> usynlige effekter i kode -> mangel på kontroll -> Runtime-exceptions
Uten å gå inn på HVORDAN (for det kommer vi tilbake til) så -> Peke på det mest interessante som skjer her! Result[A] -> enten Success MED objekt i -> eller Failure med feilmeldinger
Er eksplisitt på hvordan en entitet hentes ut fra json Valideringsregler legges på
live demo i Postman med scalaz og jsonscalaz!
MEN noe er magisk Signaturer med navn som Kleisli[EitherNel, A, V] type EitherNel[+a] hva ER dette?
Fra github. Dette sa ikke meg så mye...
Hvordan EG ser på scalaz IkkeTomListe (NonEmptyList) Trær \/ (høyrevridd Either) Memo -> Memoization av funksjoner
?? -> omtrent som en “getOrElse” a |> f -> som en f(a) kan syntaktisk skrive i motsatt rekkefølge av normalt -> tenk “putt inn i funksjon”
Gjøre et eksempel som “javascript-aktig-truthy-ting” Implementeres som et trait Dette er måten det er implementert i scalaz, kan gjøres litt annerledes om man vil...
ønsker at 1.truthy => true
figur, skal si hva noen av disse gjør!
Skal si noe om disse...
Vi snakket om denne tidligere. Scalaz deler Typeklassen (som kan brukes direkte) Syntaksen den tilbyr i Ops-klassen Også en implisitt konvertering som legger på Ops
Representerer det å “logisk legge sammen to objekter” (å legge til i |+|-tilfellet) Ops[F] definerer bare “self: F” som en variabel i en wrappet klasse
husk tilbake til Option: ~-operator som gir Monoid[A].zero som resultat dersom tom!
Dette gjelder kanskje MEST for SemiGroup-delen, men det meste som er Monoid er også SG! Og det nøstes -> Tuppel av Option[A] er monoid hvis A er Monoid
Konsistent måte å legge ting sammen på - uansett hva det er
alt som kan mappes over... “ kjør funksjon på en verdi i en kontekst, og putt verdien inn i kontekst igjen”
Som functor -> men med en applikativ er også funksjonen i en kontekst!
AUTOMATISK lifting av funksjoner til applikative functorer der det trengs!
En Monad er noe man kan kalle flatMap på => altså kan brukes i for-comprehensions >>= er alias for flatMap -> fra Haskell >> er en shortcut som bytter ut
Hvordan vi lager Success-instanser. Merk at vi kan enten angi hvilken type, eller droppe det (og la det være en del av signaturen)
Hvordan vi lager Failure-instanser. Merk at vi kan enten angi hvilken type, eller droppe det (og la det være en del av signaturen)
Hvordan et API kan se ut med Validation
Det finnes typeklasseinstanser for Validation De fleste “låser” den ene typen Men det lar oss gjøre det vi gjorde i innledningen:
Mine konklusjoner rundt Scalaz -> dette gjelder for meg -> men alle bør gjøre opp sin egen mening i motsetning til det mange mener -> scalaz er ikke farlig Felles løsning -> selv om det ikke alltid er enkelt å se at problemet er det samme...
OG ta gjerne tak i meg på Mesan-standen i expo-området!