in functional programming, programmers try to avoid side effects when they can, so it is easier to prove that a program will always do what it is supposed to. in some functional languages, like standard ml, scheme, or scala, side effects are not restricted, but programmers still try to use them less. in haskell, actions with side effects must be stated explicitly—this makes it easier to tell what code does or does not have them.