@@ -184,7 +184,7 @@ checkDefinition (Valid.Definition pattern body _) =
184184 args ->
185185 case pattern of
186186 A.A _ (Pattern.Var _) ->
187− return ()
187+ checkArguments args
188188
189189 _ ->
190190 let
@@ -194,6 +194,38 @@ checkDefinition (Valid.Definition pattern body _) =
194194 Result.throw (R.merge start end) (Error.BadFunctionName (length args))
195195
196196
197+
198+checkArguments :: [Pattern.Pattern R.Region var] -> Result.Result wrn Error.Error ()
199+checkArguments args =
200+ let
201+ vars = concatMap (Pattern.boundVarList) args
202+ in
203+ case firstDuplicate vars of
204+ Nothing ->
205+ return ()
206+
207+ Just var ->
208+ let
209+ (A.A start _) = head args
210+ (A.A end _) = last args
211+ in
212+ Result.throw (R.merge start end) (Error.RepeatedArgument var)
213+
214+
215+firstDuplicate :: [String] -> Maybe String
216+firstDuplicate vars =
217+ case vars of
218+ [] ->
219+ Nothing
220+
221+ var : rest ->
222+ if var `elem` rest then
223+ Just var
224+
225+ else
226+ firstDuplicate rest
227+
228+
197229-- VALIDATE EXPRESSIONS
198230
199231expression :: Source.Expr -> Result.Result wrn Error.Error Valid.Expr