我很困惑为什么我在GHCi中得到这个
:t sequence [Just,Just]
sequence [Just, Just] :: a -> [Maybe a]
详细说明,我可以理解sequence [Just 1, Just 2] :: Num a => Maybe [a]
,因为在查看序列类型时
sequence :: (Monad m, Traversable t) => t (m a) -> m (t a)
很明显,此函数采用monadic值的集合并返回集合的单个monadic值。因此,当我们致电sequence [Just 1, Just 2]
时,我们应该取回Just
[1,2]
。按照这一系列思路,我不应该sequence [Just, Just]
返回一个Just
?
感谢。
答案 0 :(得分:24)
第二个 General model:
myfit(f) = 4*k*Temp*beta/(m*((2*pi)^4*(f^2-v_0^2)^2+(2*pi*f*beta)^2))
Coefficients (with 95% confidence bounds):
beta = 1.35e+04 (-4.909e+09, 4.909e+09)
v_0 = 1.31e+04 (-3.802e+08, 3.802e+08)
Problem parameters:
k = 1.381e-23
m = 1.176e-12
Temp = 295.5
在另一个monad中工作。
第一个:
sequence
我们有sequence [Just 1, Just 2]
,这是Just 1 :: Maybe a
monad中的值。具体而言,类型Maybe
根据序列的要求与[Maybe a]
匹配,我们得到t (m b)
,t ~ []
,m ~ Maybe
- 因此{{1} } monad。
第二个:
b ~ a
我们有Maybe
。这是哪个monad?现在,sequence [Just, Just]
类型与Just :: a -> Maybe a
匹配,我们得到[a -> Maybe a]
,t (m b)
,t ~ []
- 因此我们现在正在使用{{1} } monad,不再在m ~ (->) a
中。
在这个与b ~ Maybe a
monad同构的(->) a
monad中,我们有例如。
Maybe
实际上,使用(->) a
monad的计算是计算"读取Reader a
"类型的隐式参数。 sequence [f, g, h] = \x -> [f x, g x, h x]
函数只是将这样的计算列表((->) a
,即a
)转换为只读取一次隐式参数的单个计算,并生成包含所有结果的列表
(sequence
,即[(->) a b]
)。