newtype оборачивает один тип так, что bottom обёрнутого типа становится bottom для newtype, при оборачивании с помощью data мы будем различать bottom обёрнутого типа и самого. т.е. по идее самого типа нет, это только фича type checker. больше отличий вроде нет.
Поэтому, возможно, это делается для требуемого поведения при исключениях. Возможно, для эффективности (лишнего типа нет). хз.
Здесь на самом деле будет тип r -> m a, т.е. после компиляции runReaderT вызываться не будет - такой функции просто нет.
Re: читаю
Date: 2006-12-05 11:27 am (UTC)newtype оборачивает один тип так, что bottom обёрнутого типа становится bottom для newtype, при оборачивании с помощью data мы будем различать bottom обёрнутого типа и самого. т.е. по идее самого типа нет, это только фича type checker. больше отличий вроде нет.
Поэтому, возможно, это делается для требуемого поведения при исключениях. Возможно, для эффективности (лишнего типа нет). хз.
Здесь на самом деле будет тип r -> m a, т.е. после компиляции runReaderT вызываться не будет - такой функции просто нет.
Это я так думаю, честно говоря. Надо почитать.