diff --git a/src/Lean/Elab/Deriving.lean b/src/Lean/Elab/Deriving.lean index e99c6fb63b..6f380820c1 100644 --- a/src/Lean/Elab/Deriving.lean +++ b/src/Lean/Elab/Deriving.lean @@ -10,3 +10,4 @@ import Lean.Elab.Deriving.BEq import Lean.Elab.Deriving.DecEq import Lean.Elab.Deriving.Repr import Lean.Elab.Deriving.FromToJson +import Lean.Elab.Deriving.SizeOf diff --git a/src/Lean/Elab/Deriving/SizeOf.lean b/src/Lean/Elab/Deriving/SizeOf.lean new file mode 100644 index 0000000000..c60f7c43fc --- /dev/null +++ b/src/Lean/Elab/Deriving/SizeOf.lean @@ -0,0 +1,28 @@ +/- +Copyright (c) 2021 Microsoft Corporation. All rights reserved. +Released under Apache 2.0 license as described in the file LICENSE. +Authors: Leonardo de Moura +-/ +import Lean.Meta.SizeOf +import Lean.Elab.Deriving.Basic + +/- +Remark: `SizeOf` instances are automatically generated. We add support for `deriving instance` for `SizeOf` +just to be able to use them to define instances for types defined at `Prelude.lean` +-/ + +namespace Lean.Elab.Deriving.SizeOf + +open Command + +def mkSizeOfHandler (declNames : Array Name) : CommandElabM Bool := do + if (← declNames.allM isInductive) && declNames.size > 0 then + liftTermElabM none <| Meta.mkSizeOfInstances declNames[0] + return true + else + return false + +builtin_initialize + registerBuiltinDerivingHandler `SizeOf mkSizeOfHandler + +end Lean.Elab.Deriving.SizeOf