functions <*> pure x
それをする必要があります。Control.Applicative
最初にモジュールをインポートします。
これも考慮してください:
Prelude Control.Applicative> [(1+),(2+)] <*> pure 4
[5,6]
Prelude Control.Applicative> [(1+),(2+)] <*> [4]
[5,6]
Prelude Control.Applicative> [(1+),(2+)] <*> [4,5]
[5,6,6,7]
Prelude Control.Applicative> [(+)] <*> [1,2] <*> [4,5]
[5,6,6,7]
Prelude Control.Applicative> (+) <$> [1,2] <*> [4,5]
[5,6,6,7]
Prelude Control.Applicative> getZipList $ ZipList [(1+),(2+)] <*> ZipList [4,5]
[5,7]
Prelude Control.Applicative> getZipList $ ZipList [(1+),(2+)] <*> pure 4
[5,6]
<$>
はの同義語ですfmap
。<*>
特定のセマンティクスに従って、左側のアプリケーションファンクターで「運ばれる」ものを右側に適用します。ネイキッドリストの場合、セマンティクスはリストモナドと同じです-すべての可能な組み合わせを作成します-左から各関数を右の各オブジェクトに適用しますpure x = [x]
。sとしてタグ付けされた(つまりnewtype
d)リストZipList
の場合、セマンティクスは「zippery」アプリケーションです。つまり、1対1、およびpure x = ZipList $ repeat x
です。