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 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 …
Wędrowałem w Dziale Ograniczonym Biblioteki Haskell i znalazłem te dwa ohydne zaklęcia: {- System.IO.Unsafe -} unsafeDupablePerformIO :: IO a -> a unsafeDupablePerformIO (IO m) = case runRW# m of (# _, a #) -> a {- Data.ByteString.Internal -} accursedUnutterablePerformIO :: IO a -> a accursedUnutterablePerformIO (IO m) = case m …
W ghci, kiedy piszę :t (-) aby dowiedzieć się, jaki typ (-), zwraca (-) :: Num a => a -> a -> a Jednak kiedy piszę, -1haskell zwraca liczbę, co wydaje się sugerować, że (-)jest typu Num a => a -> a. Jak (-)pozornie mogą mieć dwa różne typy?
seasonFunkcja używa funkcji algebraicznych ale czuję, że kod jest powtarzalne. Jak mogę to zrobić tak krótko, jak to możliwe? data Month = Jan | Feb | Mar | Apr | May | June | July | Aug | Sept| Oct | Nov | Dec deriving (Eq,Ord,Show,Read) data Seasons = Spring …
Oto kod, który gdzieś natknąłem, ale chcę wiedzieć, jak to działa: findIndices :: (a -> Bool) -> [a] -> [Int] findIndices _ [] = [] findIndices pred xs = map fst (filter (pred . snd) (zip [0..] xs)) Dane wyjściowe: findIndices (== 0) [1,2,0,3,0] == [2,4] , gdzie pred wynosi …
Tak jak w tytule: jakie są gwarancje, że jednostka zwrotna funkcji Haskell zostanie poddana ocenie? Można by pomyśleć, że w takim przypadku nie ma potrzeby przeprowadzania żadnej oceny, kompilator mógłby zastąpić wszystkie takie wywołania natychmiastową ()wartością, chyba że istnieją wyraźne żądania zachowania ścisłości, w którym to przypadku kod może zdecydować, …
Ponieważ monada stanu może być podzielona na produkt (lewy - Functor) i czytnik (prawy - reprezentowalny). Czy istnieje sposób na uwzględnienie Monady kontynuacji? Poniżej kodu jest moja próba, która nie sprawdza typu -- To form a -> (a -> k) -> k {-# LANGUAGE MultiParamTypeClasses, TypeOperators, InstanceSigs, TypeSynonymInstances #-} type …
Piszę pakiet rysunków z niektórymi częściami, a operatorzy i typy danych są rozproszone po całej. Jednak nie chcę, aby użytkownicy dodawali odpowiednie moduły za każdym razem, ponieważ byłoby to dość bałagan, na przykład miałbym Pointklasę, Monoidrolę i Styleklasę na różnych ścieżkach, takich jak ten unit module Package::Data::Monoid; # $?FILE = …
Mam typ Id ai staram się zapobiec przypadkowemu Zmuszanie, np Id Doubledo Id Int. Jeśli dobrze rozumiem role typu, poniższe nie powinny się kompilować. {-# LANGUAGE RoleAnnotations #-} import Data.Coerce (coerce) type role Id nominal newtype Id a = Id String badKey :: Id Int badKey = coerce (Id "I …
Próbuję utworzyć funkcję F #, która zwróci sumę listy ints dowolnego zagnieżdżenia. To znaczy. będzie działać dla a list<int>, a list<list<int>>i a list<list<list<list<list<list<int>>>>>>. W Haskell napisałbym coś takiego: class HasSum a where getSum :: a -> Integer instance HasSum Integer where getSum = id instance HasSum a => HasSum [a] …
Usiłuję zrozumieć typy egzystencjalne w Haskell i natknąłem się na plik PDF http://www.ii.uni.wroc.pl/~dabi/courses/ZPF15/rlasocha/prezentacja.pdf Popraw moje poniższe rozumienie, które mam do tej pory. Typy egzystencjalne nie wydają się być zainteresowane zawartym w nich typem, ale dopasowanie do nich wzoru mówi, że istnieje jakiś typ, którego nie wiemy, dopóki nie użyjemy Typeable …
Dzięki ograniczeniom ilościowym mogę dobrze wyprowadzić Eq (A f)? Jednak gdy próbuję wyliczyć Ord (A f), to się nie udaje. Nie rozumiem, jak stosować ograniczenia ilościowe, gdy klasa ograniczeń ma nadklasę. Jak uzyskać Ord (A f)i inne klasy, które mają nadklasy? > newtype A f = A (f Int) > …
Widzę bardzo dziwne zachowanie, w którym bracketfunkcja Haskella zachowuje się różnie, w zależności od tego, stack runczy stack testjest używana. Rozważ następujący kod, w którym dwa zagnieżdżone nawiasy klamrowe są używane do tworzenia i czyszczenia kontenerów Docker: module Main where import Control.Concurrent import Control.Exception import System.Process main :: IO () …
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.