[英]Examples of Functors without Applicatives
有沒有Applicative
的Functor
s的好例子? 好的,我正在尋找非平凡(不是Const Void
)的例子,這些例子不需要對undefined
訴求。 如果沒有,是否有任何方法可以證明那里的空間無趣?
這類似於不是Functor / Functor / Applicative / Monad的好例子? ,但那里沒有完全解決。
作為一個后續問題,是否有任何有趣的Functor
s示例可能會因為有太多非規范的Applicative
實例有意義而沒有Applicative
實例? 例如,“擴展的Maybe
”有點無聊
data MayB a = Jus a | Nothing1 | Nothing2 | Nothing3 | ...
instance Applicative MayB where
pure = Jus
Jus f <*> Jus x = Jus (f x)
Jus f <*> n = n
n <*> Jus x = n
n1 <*> n2 = methodOfResolvingNothingWhatsoever n1 n2
是否存在Applicative
實例的變體更具實質性的示例?
我看到仿函數但不是應用程序的主要地方是大型產品類型。 考慮類似的事情
data Mean where
Unfair :: Monad a => a () -> Mean
data Foo a = Bar Int Mean a
這很容易成為一個仿函數,但是沒有辦法讓它成為一個應用程序,因為
(Bar i g f) (Bar i' g' a) = Bar ??? ??? (f a)
我們只能填寫我們的???
由於我們無法指定某種以任何關聯的方式組合任意類型g :: a
和g' :: b
兩個值的東西,因此它們至少在一種方式Mean
具有類似幺半群的特征。
另外,我們需要mempty
或者像pure :: a -> fa
。 我們給出了a
大部分涉及a
的數據類型很容易構造,但其余的需要一個理智的“空”值。
因此,如果我們將應用程序和仿函數粉碎成一個大類型,大多數lens
都會分崩離析,因為lens
大多數有用情況都涉及這樣的情況,其中沒有合理的Applicative
實例。
所以把它放在一個手動揮之不去的方式:當一個類型的很多“東西”與類型參數不直接相關時,我們需要一種方法來合並所有這些“東西” “這並不總是可行的。
一個非常重要的(如果不公平)的例子是
{-# LANGUAGE ExistentialQuantification #-}
data AFunctor a = forall f . Functor f => AFunctor { unFunct :: f a }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.