aeson-0.9 was released today. It changes the behavior of `decode` and `eitherDecode`: They now both allow atomic values on the top level. Previously the behavior was inconsistent, `encode 1 = "1"` but `decode "1" :: Maybe Int = Nothing`.
aeson-utils has the functions `decodeV` and `eitherDecodeV` that work like aeson-0.9's `decode` and `eitherDecode` respectively, also with older aeson versions. If you want to stay backwards compatible without having varying semantics based on dependencies, check it out!