{-# LANGUAGE PatternSynonyms, ViewPatterns #-}
data Quun = Foo | Bar | Oink Quun
fooey :: Quun -> Bool
fooey Foo = True
fooey (Oink Yum) = True
fooey _ = False
pattern Yum <- (fooey -> True)
这不会编译(至少在 GHC-7.10.2 中)
/tmp/wtmpf-file10227.hs:1:1:
Recursive pattern synonym definition with following bindings:
foo (defined at /tmp/wtmpf-file10227.hs:(6,1)-(8,13))
Yum (defined at /tmp/wtmpf-file10227.hs:10:1-28)
当然,对于简单的直接自引用模式,这是有道理的。但是,为什么即使是上述的视图模式介导布局也不可能,有什么根本原因吗?我找不到这个令人信服的;毕竟可以内联视图模式并获得一个完全无害的(嗯......至少是允许的)定义:
fooey :: Quun -> Bool
fooey Foo = True
fooey (Oink (fooey -> True)) = True
fooey _ = False
pattern Yum <- (fooey -> True)
那么,由于技术原因,这些同义词是否还没有可用,我们将来会得到它们吗?