簡體   English   中英

沒有應用程序的函數的示例

[英]Examples of Functors without Applicatives

有沒有ApplicativeFunctor 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 :: ag' :: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM