parseURL :: Text -> Maybe URL
Даже если я не видел внутренний код этой функции, я точно знаю, что:
1. Она принимает одно текстовое значение.
2. Она возвращает либо URL, либо ничего.
3. Она не лезет во внешний мир.
Если же я вижу вот это:
parseURL :: Text -> Either ParseError URL
то уже знаю, что она возвращает либо URL, либо информацию об ошибке (если таковая случилась).
Про не лезет во внешний мир. Что на счет performUnsafeIO или как его там?