【发布时间】:2016-08-17 22:13:56
【问题描述】:
我正在阅读 Bartosz 的精彩博客,接着挑战问题 3,我有点难过:
https://bartoszmilewski.com/2015/04/07/natural-transformations/
Q3:定义一些从Reader Bool 到Maybe 的自然转换
我已将 Reader 函子定义为:
newtype Reader e a = Reader (e->a)
runReader :: Reader e a -> e -> a
runReader (Reader f) env = f env
instance Functor (Reader e) where
fmap f (Reader g) = Reader (\x -> f (g x))
我想找到一个自然的转变
n :: Reader Bool a -> Maybe a
我的直觉是,如果Reader的环境是True,我可以有一个Just a,如果是False,那么自然转化项目到Nothing。但这感觉有点单子,或者像 Maybe 嵌套在 Reader 中,像 Reader Bool (Maybe Int),所以我不确定。
我不知道该怎么做。我拥有的最好的是:
n :: Reader Bool a -> Maybe a
n (Reader f) = Just (f True)
但这不能考虑环境,也不能返回Nothing。
我想建造一个可以通勤的结构,用fmap 建造一个广场,并进行自然转换。
例如:
nat
Reader Bool Int +---------------------------> Maybe Int
+ +
| |
| |
| |
| fmap show | fmap show
| |
| |
| |
| |
v nat v
Reader Bool String +--------------------------> Maybe String
你能帮我填补空白吗?
【问题讨论】:
-
您希望
n使用环境,但是由于您只有Reader,因此没有环境,您必须自己提供。我觉得Just (f True)、Just (f False)和Nothing都是这些函子之间的自然转换。
标签: haskell functor category-theory