Undefined на уровне типа
Часто, когда я играю с кодом Haskell, я заканчиваю тему аннотацией типа и undefined
.
foo :: String -> Int
foo = undefined
Существует ли тип undefined типа уровня, который я мог бы использовать аналогичным образом?
(В идеале, в сочетании с аннотацией вида)
type Foo :: * -> *
type Foo = Undefined
Дальше подумал в том же потоке: есть ли способ, чтобы я удалял экземпляры typeclass для типов, созданных таким образом? Еще проще, чем следующий теоретический путь?
instance Monad Foo where
return = undefined
(>>=) = undefined
Ответы
Ответ 1
Вы можете использовать EmptyDataDecls
, чтобы заглушить тип, и с помощью KindSignatures
вы можете дать ему вид:
{-# LANGUAGE EmptyDataDecls, KindSignatures #-}
data Foo :: * -> *
Вы также можете отключить экземпляр Monad
без предупреждений с помощью этой опции для GHC.
{-# OPTIONS_GHC -fno-warn-missing-methods #-}
instance Monad Foo
И тогда вам не нужно оставлять реализацию для return
и >>=
.