Подтвердить что ты не робот

Undefined на уровне типа

Часто, когда я играю с кодом Haskell, я заканчиваю тему аннотацией типа и undefined.

foo :: String -> Int
foo = undefined

Существует ли тип undefined типа уровня, который я мог бы использовать аналогичным образом?

(В идеале, в сочетании с аннотацией вида)

type Foo :: * -> *
type Foo = Undefined

Дальше подумал в том же потоке: есть ли способ, чтобы я удалял экземпляры typeclass для типов, созданных таким образом? Еще проще, чем следующий теоретический путь?

instance Monad Foo where
  return = undefined
  (>>=) = undefined
4b9b3361

Ответ 1

Вы можете использовать EmptyDataDecls, чтобы заглушить тип, и с помощью KindSignatures вы можете дать ему вид:

{-# LANGUAGE EmptyDataDecls, KindSignatures #-}

data Foo :: * -> *

Вы также можете отключить экземпляр Monad без предупреждений с помощью этой опции для GHC.

{-# OPTIONS_GHC -fno-warn-missing-methods #-}

instance Monad Foo

И тогда вам не нужно оставлять реализацию для return и >>=.