Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Warning: calling polyEqual

Tags:

sml

smlnj

Can somebody please explain, what does this warning means?

stdIn:18.35 Warning: calling polyEqual 

and why do I have "a and not 'a in the following statement:

val alreadyVisited = fn : ''a * ''a list -> bool 

this is my function:

fun alreadyVisited(v, []) = false     | alreadyVisited(v, x::xs) = if(x=v) then true         else alreadyVisited(v, xs); 
like image 829
rookie Avatar asked Dec 01 '10 09:12

rookie


1 Answers

'a means "any type", while ''a means "any type that can be compared for equality". Since your alreadyVisited function compared x and v using =, x and v need to have a type that supports comparing them for equality, so you get the type ''a.

The warning means that you're comparing two values with polymorphic type for equality.

Why does this produce a warning? Because it's less efficient than comparing two values of known types for equality.

How do you get rid of the warning? By changing your function to only work with a specific type instead of any type.

Should you care about the warning? Probably not. In most cases I would argue that having a function that can work for any type is more important than having the most efficient code possible, so I'd just ignore the warning.

like image 138
sepp2k Avatar answered Sep 28 '22 01:09

sepp2k