Howcome в Haskell, когда есть значение, которое будет отбрасываться, вместо ⊥
используется ()
?
Примеры (на данный момент не могу думать ни о чем другом, кроме действий IO):
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
seq x
.