【问题标题】:functors from partially applied function type部分应用函数类型的函子
【发布时间】:2017-07-26 04:26:37
【问题描述】:

在 Haskell 编程中有一个问题说: 完成以下声明:

instance Functor ((->) a) where

现在 Functor Thing 的类型定义为:

instance Functor Thing where    
   --fmap::(a -> b) -> Thing a -> Thing b 

我想知道这种减少是否有意义:

instance Functor ((->) a) where
    -- fmap::(a -> b) -> ((->) a) a -> ((->) a) b 
    -- therefore
    -- fmap::(a -> b) -> a -> a -> (a -> b) 
    -- therefore
    -- fmap::b -> b

——更新—— 我错过了括号,应该是

instance Functor ((->) a) where
    -- fmap::(a -> b) -> ((->) a) a -> ((->) a) b 
    -- therefore
    -- fmap::(a -> b) -> (a -> a) -> (a -> b) 
    -- therefore
    -- I should be returning a function of a -> b

【问题讨论】:

    标签: haskell functor


    【解决方案1】:

    不,因为您的实例声明中的afmap 类型中的a 不同。您需要在实例声明中分配一个类型变量,以避免 "capturing" 类型中的 a fmap

    instance Functor ((->) r) where
      fmap :: (a -> b) -> (r -> a) -> (r -> b)
    

    【讨论】:

    • 谢谢缰绳!为了澄清我的理解:从 fmap (+1) (show) 返回的部分函数将采用 3 并返回“4”?
    • 否,但 fmap show (+1) 将采用 3 并返回 "4"fmap 这里是(.)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多