2012-01-27 119 views
21

通常,當我玩Haskell代碼時,我會用類型註釋和undefined來存儲事物。未定義類型級別

foo :: String -> Int 
foo = undefined 

是否有類型級別的「未定義」,我可以用類似的方式?

(理想情況下,以一種註解一起)

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

進一步想在同一個線程:有沒有辦法對我來說,存根出類型類爲創建這樣類型的實例?比以下理論方法更簡單的方法?

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

回答

24

您可以使用EmptyDataDecls存根出一個類型,並與KindSignatures你可以給它一種:

{-# LANGUAGE EmptyDataDecls, KindSignatures #-} 

data Foo :: * -> * 

您也可以存根出Monad實例,而與此選項GHC警告。

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

instance Monad Foo 

然後你就不需要留下任何實施return>>=

+1

不錯!正是我在找的東西;它更方便,因爲你不必寫'Foo = Undefined'!和善的簽名!很棒的醬。 – 2012-01-27 19:02:59

+0

我相信它與類型別名不一樣 - 當你引入一個新的數據時,不會有'Foo a = a'的機會。所以,它與問題的代碼不一樣,這可能很好。 – gatoatigrado 2012-01-27 20:21:28

+0

@gatoatigrado:我認爲這個需求只是一個尚未寫入的類型的佔位符,而不是本身的類型別名,然後這是一個合適的解決方案。無論如何,很高興幫助你丹! – danr 2012-01-28 01:58:51

相關問題