考慮以下類型簽名: data Foo x = Foo {
name :: String
, reader :: String -> x
}
instance Functor Foo where
fmap f (Foo n r) = Foo n $ f . r
現在我展示從自然轉化Foo到optparse-applicative的Parser類型: impor
我想在一個程序中使用optparse-applicative庫,該程序根據參數數目執行不同的操作。 例如,參數解析爲它計算周長的程序: module TestOpts where
import Options.Applicative
type Length = Double
data PerimeterCommand
= GeneralQuadranglePerimeter
我瞭解<$>的簽名背後的原因,因爲它只是fmap的中綴版本,但將其與>>=的簽名類型進行比較,它對我來說意義不大。 我們先來確定一下我的意思。 (>>=) :: Monad m => m a -> (a -> m b) -> m b
(<*>) :: Applicative f => f (a -> b) -> f a -> f b
(<$>) :: Functor f => (a -> b)
讓我們假設我們有 a :: IO (Maybe String)
b :: IO (Maybe String)
data Foo = Foo String String
我想從a和b獲得Maybe Foo。 目前,我正在做這個 do
a' <- a
b' <- b
Foo <$> a' <*> b'
但是,我覺得應該有一個更簡單的方法, (\x y ->