refactor(library/init/lean/parser/reader): remove reader.has_view default instance
This commit is contained in:
parent
6384d118a8
commit
287fdce45b
3 changed files with 17 additions and 3 deletions
|
|
@ -81,9 +81,8 @@ class reader.has_view (r : reader) (α : out_param Type) :=
|
|||
(view : syntax → option α)
|
||||
(review : α → syntax)
|
||||
|
||||
@[priority 0] instance reader.has_view.default (r) : reader.has_view r syntax :=
|
||||
{ view := some,
|
||||
review := id }
|
||||
instance reader.has_view.default (r : reader) : inhabited (reader.has_view r syntax) :=
|
||||
⟨{ view := some, review := id }⟩
|
||||
|
||||
class macro.has_view (m : macro) (α : out_param Type) :=
|
||||
(view : syntax → option α)
|
||||
|
|
@ -258,6 +257,8 @@ def any_of (rs : list reader) : reader :=
|
|||
| (r::rs) := (rs.map reader.read).foldl (<|>) r.read),
|
||||
tokens := (rs.map reader.tokens).join }
|
||||
|
||||
instance any_of.view (rs) : reader.has_view (any_of rs) syntax := default _
|
||||
|
||||
/-- Parse a list `[p1, ..., pn]` of readers as `p1 <|> ... <|> pn`.
|
||||
The result will be wrapped in a node with the the index of the successful
|
||||
parser as the name. -/
|
||||
|
|
|
|||
|
|
@ -20,6 +20,14 @@ local postfix `?`:10000 := optional
|
|||
local postfix *:10000 := many
|
||||
local postfix +:10000 := many1
|
||||
|
||||
instance symbol.view (s) : reader.has_view (symbol s) syntax := default _
|
||||
instance raw_symbol.view (s) : reader.has_view (raw_symbol s) syntax := default _
|
||||
instance number.view : reader.has_view number syntax := default _
|
||||
instance ident.view : reader.has_view ident syntax := default _
|
||||
instance recurse.view : reader.has_view recurse syntax := default _
|
||||
instance with_recurse.view (r) : reader.has_view (with_recurse r) syntax := default _
|
||||
|
||||
@[derive reader.has_view]
|
||||
def prelude.reader : reader :=
|
||||
node! «prelude» ["prelude"]
|
||||
|
||||
|
|
@ -30,6 +38,7 @@ node! import_path [
|
|||
dirups: (raw_symbol ".")*,
|
||||
module: ident]
|
||||
|
||||
@[derive reader.has_view]
|
||||
def import.reader : reader :=
|
||||
node! «import» ["import", imports: import_path.reader+]
|
||||
|
||||
|
|
@ -67,6 +76,8 @@ def quoted_symbol : reader :=
|
|||
{ read := do (s, info) ← with_source_info $ take_until (= '`'),
|
||||
pure $ syntax.atom ⟨info, atomic_val.string s⟩ }
|
||||
|
||||
instance quoted_symbol.view : reader.has_view quoted_symbol syntax := default _
|
||||
|
||||
@[derive reader.has_view]
|
||||
def notation_quoted_symbol.reader : reader :=
|
||||
node! notation_quoted_symbol [
|
||||
|
|
@ -144,6 +155,7 @@ node! «reserve_mixfix» [
|
|||
try ["reserve", kind: mixfix.kind.reader],
|
||||
sym: notation_symbol.reader]
|
||||
|
||||
@[derive reader.has_view]
|
||||
def command.reader :=
|
||||
with_recurse $ any_of [open.reader, section.reader, universe.reader, notation.reader, reserve_notation.reader,
|
||||
mixfix.reader, reserve_mixfix.reader] <?> "command"
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ def hole := {macro . name := `hole}
|
|||
def hole.reader : reader :=
|
||||
node hole [symbol "_"]
|
||||
|
||||
@[derive reader.has_view]
|
||||
def term.reader :=
|
||||
any_of [
|
||||
hole.reader
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue