• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Co oznacza ta notacja w haskellu?

+1 głos
113 wizyt
pytanie zadane 5 marca 2018 w Inne języki przez littlerunaway Obywatel (1,800 p.)
data Loc = Loc String Int Int
data Parser b a = P (b -> [(a, b)])

parse :: Parser b a -> b -> [(a, b)]
parse (P p) inp = p inp

type Lexer a = Parser (Loc, String) a

Załóżmy że a w Lexerze będzie char'em. Jeżeli chciałabym teraz zdefiniować coś typu Lexer w jaki sposób to zrobić? Próbowałam coś takiego ale zwraca błędy. 

Lexer (Parser (Loc "s" 1 2) "abc") 'a'

Mogę prosić o wytłumaczenie takiej notacji?

1 odpowiedź

+2 głosów
odpowiedź 5 marca 2018 przez monika90 Pasjonat (22,980 p.)
wybrane 5 marca 2018 przez littlerunaway
 
Najlepsza

Jeżeli chcesz utworzyć wartość typu Lexer Char, to musisz użyć konstruktora P, bo Lexer Char to synonim dla Parser (Loc, String) Char, a wartości typu Parser a b tworzy się konstruktorem P, gdzie argumentem tego konstruktora jest funkcja, która parsuje input i zwraca listę wyników.

Skrajnie prosty przykład, lekser który parsuje dowolny znak:

data Loc = Loc String Int Int deriving Show

data Parser b a = P (b -> [(a, b)])

parse :: Parser b a -> b -> [(a, b)]
parse (P p) inp = p inp

type Lexer a = Parser (Loc, String) a

char :: Lexer Char
char = P $ \(Loc path row col, input) ->
    case input of
        ch:rest -> [(ch, (Loc path row (col + 1), rest))]
        [] -> []

main :: IO ()
main = print $ parse char (Loc "main.cpp" 1 1, "abc")

 

1
komentarz 5 marca 2018 przez littlerunaway Obywatel (1,800 p.)
Dziękuję, jesteś wspaniała!
komentarz 5 marca 2018 przez littlerunaway Obywatel (1,800 p.)

@monika90, Masz zablokowane wiadomości prywatne, Czy znajdzie się jakiś inny sposób bym mogła się z tobą skontaktować?

Podobne pytania

0 głosów
1 odpowiedź 110 wizyt
pytanie zadane 13 grudnia 2018 w Inne języki przez k222 Nałogowiec (26,730 p.)
0 głosów
1 odpowiedź 71 wizyt
pytanie zadane 16 listopada 2018 w Inne języki przez k222 Nałogowiec (26,730 p.)
+1 głos
0 odpowiedzi 62 wizyt
pytanie zadane 21 marca 2018 w Inne języki przez littlerunaway Obywatel (1,800 p.)
Porady nie od parady
Zadając pytanie postaraj się o poprawną pisownię i czytelne formatowanie tekstu.Kompozycja

66,384 zapytań

113,137 odpowiedzi

239,497 komentarzy

46,641 pasjonatów

Przeglądających: 289
Pasjonatów: 2 Gości: 287

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...