池上です。

> matchingLength = (length .) . filter . (flip elem)
> だと
> Unresolved top-level overloading
> *** Binding : matchingLength
> *** Outstanding context : Eq b
> というエラーになりました。これは何が悪いんでしょうか。

これは、 Haskell の型推論システムが完璧でないことに
起因しています。

matchingLength :: Eq a => [a] -> [a] -> Int
matchingLength = (length .) . filter . (flip elem)

のように、型を記述すれば通ると思います。

問題を単純化すると、
  elem' = elem
は、hugs では同じように
> Unresolved top-level overloading
> *** Binding : elem'
> *** Outstanding context : Eq b
が返ります。

ghci のメッセージはもう少し親切で、
  elem' = elem
を ghci に食わせれば、

  Ambiguous type variable `a' in the top-level constraint:
    `Eq a' arising from use of `elem' at moge.hs:3
  Possible cause: the monomorphism restriction applied to the following:
    elem' :: a -> [a] -> Bool (bound at moge.hs:3)
  Probable fix: give these definition(s) an explicit type signature

のように、型宣言を明示してくれないといやん、と教えてくれます。

参考:
  http://www.haskell.org/onlinereport/decls.html#4.5.5
  The monomorphism restriction

--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/