Не определено на уровне типа - PullRequest
23 голосов
/ 27 января 2012

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

foo :: String -> Int
foo = undefined

Есть ли уровень неопределенности, который я мог бы использовать подобным образом?

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

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

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

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

Ответы [ 2 ]

26 голосов
/ 27 января 2012

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

{-# LANGUAGE EmptyDataDecls, KindSignatures #-}

data Foo :: * -> *

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

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

instance Monad Foo

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

3 голосов
/ 27 октября 2018

Этот вопрос был задан и на него давным-давно ответили;С тех пор развивались лучшие практики.

В наши дни вместо undefined для заглушки кода следует использовать типизированные дыры и их аналог уровня типа частичный типподписи .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...