refactor(library/init/lean/parser/reader): remove reader.has_view default instance

This commit is contained in:
Sebastian Ullrich 2018-08-22 09:41:25 -07:00
parent 6384d118a8
commit 287fdce45b
3 changed files with 17 additions and 3 deletions

View file

@ -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. -/

View file

@ -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"

View file

@ -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