なぜステートレスファンクタのoperator()はstaticにできませんか?ステートレスラムダオブジェクトは、operator()と同じシグネチャを持つフリー関数へのポインタに変換可能です。 Stephan T. Lavavej on p。 6は、関数ポインタへの変換がちょうどoperator FunctionPointer()(引用)であることを指摘しています。しかし、非メンバ関数に関してはo
私はHaskellのFunctorインスタンスがファンクタの法則によって(一意に)決定されているのか疑問に思っていました。 は、少なくとも「常用」データ型の場合にFunctorのインスタンスを導出することができるため、少なくとも多種多様なケースで一意である必要があります。便宜上 、Functor定義とファンクタの法律は以下のとおりです。 class Functor f where
fma
モナドはFunctor typeclassからfmapを得る。コモノドがCofunctorクラスで定義されたcofmapメソッドを必要としないのはなぜですか?次のように class Functor f where
fmap :: (a -> b) -> (f a -> f b)
Cofunctorを定義することができます: class Cofunctor f where
c
後、私は固定小数点を行った後、ファンクタのインスタンスを導出する方法がわからないです: data FreeF f a next = PureF a | FreeF (f next) deriving (Functor)
data Mu f = In { out :: f (Mu f) }
newtype Free f a = Free( Mu (FreeF f a) )
instanc
私はtreeの定義をfunctorとfoldableのインスタンスにするよう求めているhw問題のコードを少し書いています。私は以下のコードを記述する場合: import Data.Foldable
import Data.Monoid
data Tree a = Leaf a
| Node [Tree a]
deriving (Show)
instance Fu
適用ファンクタfが与えられたので、私は新しい適用ファンクタRev fをfのように変更しましたが、効果の順序は逆になりました。ここでは、次のとおりです。 import Control.Applicative
newtype Rev f a = Rev {unRev :: f a}
instance Functor f => Functor (Rev f) where
fmap f
ハスケルのファンクタを勉強するとき、私はFunctor.Indexedファンクタのタイプを思いついた。このファンクタは、imapという操作を定義します。私はその定義とimap署名を理解していませんでした:imap :: (a -> b) -> f j k a -> f j k b。私は正式な定義を見つけようとしましたが、これだけが見つかりました:http://ncatlab.org/nlab/sh
私は関数型プログラミング(JavaScriptから来て)には新しく、2つの違いを伝えるのは苦労しています。これは、ファンクターとモナドの理解にも困惑しています。 ファンクタ: class Functor f where
fmap :: (a -> b) -> f a -> f b
モナド(簡体字): class Monad m where
(>>=) :: m a -> (