Haskell to funkcjonalny język programowania z silnym typowaniem statycznym, leniwą oceną, szeroką obsługą równoległości i współbieżności oraz unikalnymi możliwościami abstrakcyjnymi.
W jakich sytuacjach należy liftIOużyć? Kiedy używam ErrorT String IO, liftfunkcja działa w celu podniesienia akcji IO do ErrorT, więc liftIOwydaje się zbędna.
Szukam naprawdę prostych, łatwych do zrozumienia wyjaśnień schematów rekurencyjnych i korekturalnych (katamorfizmów, anamorfizmów, hylomorfizmów itp.), Które nie wymagają podążania za wieloma linkami ani otwierania podręcznika teorii kategorii. Jestem pewien, że wymyśliłem wiele z tych schematów nieświadomie i "zastosowałem" je w swojej głowie podczas procesu kodowania (jestem pewien, że wielu z …
Zastanawiam się, czy istnieje sposób, aby Haskell działał na JVM (skompilowanym lub zinterpretowanym)? Na Sourceforge istnieje JHaskell, ale ten wydaje się być pusty i martwy. GHC używa LLVM jako zaplecza kompilatora. Czy byłoby dobrym pomysłem lub możliwą kompilacją LLVM do kodu bajtowego Javy? A może użyć innego zaplecza kompilatora?
Happstack Lite psuje mi się, ponieważ dostaje blaze-html w wersji 0.5 i chce wersji 0.4. Cabal mówi, że zainstalowane są obie wersje 0.4.3.4 i 0.5.0.0. Chcę usunąć 0.5.0.0 i używać tylko starszej wersji. Ale Cabal nie ma polecenia „odinstalowania”, a kiedy próbuję ghc-pkg unregister --force blaze-html, ghc-pkgmówi , że moje …
Powszechnie wiadomo, że funktory aplikacyjne są zamknięte w kompozycji, ale monady nie. Jednak mam problem ze znalezieniem konkretnego kontrprzykładu pokazującego, że monady nie zawsze komponują. Ta odpowiedź daje [String -> a]jako przykład nie-monady. Po trochę zabawie z tym, wierzę w to intuicyjnie, ale ta odpowiedź mówi tylko, że „złączenia nie …
Jak zdefiniować odpowiednik tej funkcji (wzięty z learnyouahaskell ) w GHCi? import Data.List numUniques :: (Eq a) => [a] -> Int numUniques = length . nub Bez deklaracji typu GHCi akceptuje definicję funkcji, ale kończy się niepomocnym typem: Prelude Data.List> import Data.List Prelude Data.List> let numUniques' = length . nub …
Często czytam ten termin na blogach o haskell i programowaniu funkcjonalnym (szczególnie na blogu sigfpe ), ale nie mam pojęcia, co to znaczy. Przez większość czasu udaje mi się nie wiedzieć, ale prawdopodobnie zrozumiałbym teksty dużo lepiej, gdybym wiedział. Google mi nie pomogło. Gubię się w sprawach technicznych. Również nietechniczne …
Jak wskazuje tytuł pytania, chcę wiedzieć, czym jest polimorfizm Lewity i jaka jest jego motywacja? Wiem, że ta strona zawiera pewne szczegóły, ale większość wyjaśnień przechodzi przez moją głowę. :) Chociaż ta strona jest trochę bardziej przyjazna, nadal nie jestem w stanie zrozumieć, jaka jest za nią motywacja.
Chcę zrobić w Haskell coś, co wygląda tak: main1 = do s <- getLine if s == "foo" then putStr "You entered foo" Oczywiście nie jest to legalne, ponieważ nie ma else. Jedna alternatywa, o której myślałem: nop :: IO () nop = sequence_ [] main2 = do s <- …
Biorąc pod uwagę dowolny typ kontenera, możemy utworzyć (skoncentrowany na elementach) Zipper i wiedzieć, że ta struktura jest Comonad. Zostało to niedawno zbadane ze wspaniałymi szczegółami w innym pytaniu o przepełnienie stosu dla następującego typu: data Bin a = Branch (Bin a) a (Bin a) | Leaf a deriving Functor …
W obecnym stanie to pytanie nie pasuje do naszego formatu pytań i odpowiedzi. Oczekujemy, że odpowiedzi będą poparte faktami, referencjami lub ekspertyzą, ale to pytanie prawdopodobnie będzie wymagało debaty, argumentów, ankiet lub rozszerzonej dyskusji. Jeśli uważasz, że to pytanie można poprawić i prawdopodobnie ponownie otworzyć, odwiedź centrum pomocy, aby uzyskać …
Czy ktoś mógłby mi wyjaśnić funkcjonalne soczewki? To zaskakująco trudny temat do wygooglowania i nie poczyniłem żadnych postępów. Wiem tylko, że zapewniają podobną funkcjonalność get / set niż w OO.
Potrzebuję funkcji, która pobiera dwa Ints ( ai b) i zwraca A/Bjako Int. Jestem pewien, że A/Bzawsze będzie to liczba całkowita. Oto moje rozwiązanie: myDiv :: Int -> Int -> Int myDiv a b = let x = fromIntegral a y = fromIntegral b in truncate (x / y) Ale …
W Real World Haskell , rozdział 4. o programowaniu funkcjonalnym : Napisz foldl z foldr: -- file: ch04/Fold.hs myFoldl :: (a -> b -> a) -> a -> [b] -> a myFoldl f z xs = foldr step id xs z where step x g a = g (f a …
Potrzebuję pomocy, aby zrozumieć użycie trzech funkcji Haskella try ( Control.Exception.try :: Exception e => IO a -> IO (Either e a)) złapać ( Control.Exception.catch :: Exception e => IO a -> (e -> IO a) -> IO a) uchwyt ( Control.Exception.handle :: Exception e => (e -> IO a) …
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.