{-# 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)
では、そのようなシノニムは技術的な理由でまだ利用できないのでしょうか? 将来的に利用できるようになるのでしょうか?