@@ -85,11 +85,13 @@ defmodule Protocol do
85
85
Returns `:ok` if so, otherwise raises ArgumentError.
86
86
"""
87
87
@ spec assert_impl! ( module , module ) :: :ok | no_return
88
- def assert_impl! ( protocol , impl ) do
89
- assert_impl! ( protocol , impl , "" )
88
+ def assert_impl! ( protocol , base ) do
89
+ assert_impl! ( protocol , base , "" )
90
90
end
91
91
92
- defp assert_impl! ( protocol , impl , extra ) do
92
+ defp assert_impl! ( protocol , base , extra ) do
93
+ impl = Module . concat ( protocol , base )
94
+
93
95
case Code . ensure_compiled ( impl ) do
94
96
{ :module , ^ impl } -> :ok
95
97
_ -> raise ArgumentError ,
@@ -574,14 +576,14 @@ defmodule Protocol do
574
576
end
575
577
576
578
defp derive ( protocol , for , struct , opts , env ) do
577
- impl = Module . concat ( protocol , Map )
578
579
extra = ", cannot derive #{ inspect protocol } for #{ inspect for } "
579
580
assert_protocol! ( protocol , extra )
580
- assert_impl! ( protocol , impl , extra )
581
+ assert_impl! ( protocol , Map , extra )
581
582
582
583
# Clean up variables from eval context
583
584
env = % { env | vars: [ ] , export_vars: nil }
584
585
args = [ for , struct , opts ]
586
+ impl = Module . concat ( protocol , Map )
585
587
586
588
:elixir_module . expand_callback ( env . line , impl , :__deriving__ , args , env , fn
587
589
mod , fun , args ->
0 commit comments