Почему в Haskell, когда есть значение, которое будет отброшено, ()
используется вместо ⊥
?
Примеры (на данный момент не могут думать ни о чем, кроме операций ввода-вывода):
mapM_ :: (Monad m) => (a -> m b) -> [a] -> m ()
foldM_ :: (Monad m) => (a -> b -> m a) -> a -> [b] -> m ()
writeFile :: FilePath -> String -> IO ()
При строгой оценке это имеет смысл, но в Haskell это только увеличивает домен.
Возможно, есть функции "неиспользуемых параметров" d -> a
, которые строго относятся к d
(. где d
является параметром неограниченного типа и не появляется свободным вa
)? Бывший:seq
, const' x y = y
послед. x
.