我々はHaskellで異質なリストを作成する対の配列を使用することができます。ハスケル:タイプ別に不均一なリストをフィルタリング
type a *: b = (a, b)
a *: b = (a, b)
infixr 5 *:
hlist :: Int *: String *: Maybe Float *:()
hlist = 1 *: "hello" *: Just 3 *:() -- (1, ("hello", (Just 3,())))
は、我々はこれらのリストにはタイプレベルのフィルタリングを行うことができます方法はありますか?これは、別個のタイプa
、b
、およびc
のためにいくつかの多型の機能そのhfilter
ように定義されています
hfilter :: a *: b *: c *: a *: b *: a *:() -> a *: a *: a *:()
hfilter :: a *: b *: c *: a *: b *: a *:() -> b *: b *:()
hfilter :: a *: b *: c *: a *: b *: a *:() -> c *:()
hfilter :: a *: b *: c *: a *: b *: a *:() -> ()
コンパイルの問題で申し訳ありませんが、私は携帯電話から投稿していました。 – rampion
これで、フィルター引数を渡して 'OverlappingInstances'を必要としないバージョン(https://gist.github.com/1885439)' hfilter :: a - > h - > h''、それは出力に異種リストを使用します。 hfilter(undefined :: Int)hlist ::() 'は'() '、' hfilter(未定義:: Int)hlist :: Int:*() 'は' 1:*() 'と' hfilter( undefined :: Int)hlist :: Int:* Int:*() 'は' 1:* 2:*() 'です。 – rampion
argですが、実際には 'OverlappingInstances'が必要です。 – rampion