Каков тип return "abc"
при печати в ghci?
Суть вопроса в том, что он полиморфен в монаде:
ghci> :t return "abc"
return "abc" :: (Monad m) => m [Char]
и то, что будет напечатано, зависит от того, какая монада выбрана:
ghci> return "abc" :: Maybe String
Just "abc"
ghci> return "abc" :: [] String
["abc"]
но вот что на самом деле напечатано:
ghci> return "abc"
"abc"