Programowanie funkcjonalne to paradygmat programowania oparty na budowaniu abstrakcji za pomocą funkcji, unikaniu skutków ubocznych i zmianie stanu. Czyste funkcjonalne programowanie jest bezpieczne dla wątków.
Wydaje mi się, że zawsze można przekazywać argumenty funkcji, a nie klasę. Na przykład zamiast definiowania klasy równości: class Eq a where (==) :: a -> a -> Bool Używanie go w innych funkcjach do wskazywania argumentu typu musi być instancją Eq: elem :: (Eq a) => a -> [a] …
To pytanie teoretyczne dotyczy funkcji Haskella, które mogą przyjmować argumenty dowolnego typu. Czy istnieje różnica między sposobem działania z podpisami typu a -> b -> a i c -> a -> c są tworzone? Każda pomoc jest mile widziana.
Wiele rodzajów optyki ma reprezentację van Laarhoven. Na przykład Lenstyp Lens s t a b może być reprezentowany jako: Functor f => (a -> f b) -> s -> f t Podobnie a Traversal, można przedstawić w podobny sposób, zamieniając Functorograniczenie na Applicative: Applicative f => (a -> f b) …
W Real World Haskell, rozdział 4, strona 98 druku, pyta się, czy wordsmożna go wdrożyć za pomocą foldów, i to też jest moje pytanie: Czy to możliwe? Jeśli nie to dlaczego? Jeśli tak, to w jaki sposób? Wymyśliłem następujące, które są oparte na pomyśle, że każde spacje powinny być poprzedzone …
Oto fragment kodu z dokumentacji dla fs2 . Funkcja gojest rekurencyjna. Pytanie brzmi: skąd wiemy, czy można je bezpiecznie nakładać i jak uzasadnić, czy jakakolwiek funkcja jest bezpieczna w stosie? import fs2._ // import fs2._ def tk[F[_],O](n: Long): Pipe[F,O,O] = { def go(s: Stream[F,O], n: Long): Pull[F,O,Unit] = { s.pull.uncons.flatMap …
Do czyszczenia listy danych stworzyłem metodę, która akceptuje listę danych i listę operacji czyszczenia do wykonania. public <T> List<T> cleanData(List<T> data, List<Function<T, T>> cleanOps) { List<T>dataNew=data.stream().map((str) -> { T cleanData = str; for(Function<T,T> function:cleanOps) { cleanData=function.apply(cleanData); } return cleanData; }).collect(Collectors.toList()); return dataNew; } Problem polega na tym, że ponownie tworzymy …
Czytam programowanie książek w scali i jest powiedziane: ... w tym przypadku jego efektem ubocznym jest drukowanie do standardowego strumienia wyjściowego. i nie widzę, gdzie jest efekt uboczny, ponieważ dla tego samego wejścia println wydrukuje to samo wyjście (myślę) UPDATE na przykład za każdym razem, gdy wywołujemy: println(5) wypisze 5 …
Mam funkcję w stylu ES6, która jest definiowana za pomocą kompozycji funkcji z asyncPipe. import { getItemAsync } from 'expo-secure-store'; const asyncPipe = (...fns) => x => fns.reduce(async (y, f) => f(await y), x); const getToken = () => getItemAsync('token'); const liftedGetToken = async ({ ...rest }) => ({ token: …
Natknąłem się na niektóre irytujące rzeczy. Wiem, że haskell działa ze słabą normalną postacią głowy (WHNF) i wiem, co to jest. Wpisując następujący kod do ghci (używam polecenia: sprint, który redukuje wyrażenie do WHNF według mojej wiedzy.): let intlist = [[1,2],[2,3]] :sprint intlist daje mi intlist = _to całkowicie sens. …
Mamy POJO, które jest automatycznie generowane z ~ 60 właściwościami. Jest to generowane w avro 1.4, który nie obejmuje getterów / setterów. Biblioteka, której używamy do zapewniania prostych transformacji między obiektami, wymaga metod podobnych do getter / setter w celu poprawnego działania. Czy istnieje sposób replikacji modułów pobierających / ustawiających …
Naprawdę mam problemy ze zrozumieniem callCC. Dostaję moc kontynuacji i wykorzystałem tę koncepcję w niektórych moich projektach, aby stworzyć fajne koncepcje. Ale nigdy nie musiałem używać czegoś o większych możliwościach niż cont :: ((a->r)->r)-> Cont r a. Po użyciu ma sens, dlaczego nazywają Cont Monad matką wszystkich monad, JESZCZE, nie …
Czy w przypadku korzystania z funkcjonalnego środowiska, takiego jak Scala cats-effect, czy budowę obiektów stanowych należy modelować za pomocą typu efektu? // not a value/case class class Service(s: name) def withoutEffect(name: String): Service = new Service(name) def withEffect[F: Sync](name: String): F[Service] = F.delay { new Service(name) } Konstrukcja nie jest …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.