2012-01-27 22 views
21

Tanımı Haskell koduyla çalışırken, çoğu zaman bir tür ek açıklama ve undefined ile biter.Tür düzeyinde

foo :: String -> Int 
foo = undefined 

tip düzey ben benzer şekilde kullanabileceği "tanımsız" var mıdır?

(İdeal olarak, bir tür ek açıklama ile birlikte) aynı iş parçacığı üzerinde

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

Daha düşüncenin: Beni bu şekilde oluşturulan türleri için örneklerini dışarı typeclass saplama için bir yol var? Aşağıdaki teorik yoldan daha kolay bir yol?

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

cevap

24

Bir tür saplama için EmptyDataDecls kullanabilir ve KindSignatures ile bunu bir tür verebilir:

{-# LANGUAGE EmptyDataDecls, KindSignatures #-} 

data Foo :: * -> * 

Ayrıca ghc bu seçenekle Uyarılar olmadan Monad örneği saplama olabilir.

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

instance Monad Foo 

Ve sonra return ve >>= için her türlü uygulama da terk etmek gerekmez.

+1

Güzel! Tam olarak aradığım şey; Daha da kullanışlı, çünkü "Foo = Undefined'" yazmanız gerekmiyor! Ve nazik imzalar! Muhteşem sos. –

+0

Sanırım bir tür takma adla aynı değil - yeni bir Veri eklediğinizde, Foo a = a'nın şansı yoktur. Yani, sorunun koduyla aynı değil, bu da iyi olabilir. – gatoatigrado

+0

@gatoatigrado: Gereksinimin, yazılacak bir tür için sadece bir yer tutucu olduğunu düşünüyorum, bir tür takma ad değil, o zaman bu uygun bir çözümdür. Her neyse, sana yardım etmekten memnun oldum Dan! – danr

İlgili konular