作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下haskell代码来扩展字符串中的环境变量(省略解析代码):
import Control.Monad (liftM)
data Token = Literal String | EnvReference String deriving Show
expandTokens :: (Monad m) => (String -> m (Maybe String)) -> [Token] -> m String
expandTokens getEnv toks = liftM concat (mapM toString toks) where
toString (Literal s) = return s
toString (EnvReference v) = liftM (maybe "" id) (getEnv v)
toString
函数显式类型:
toString :: Monad m => Token -> m String
Sample.hs:8:58:
Could not deduce (m ~ m1)
from the context (Monad m)
bound by the type signature for
expandTokens :: Monad m =>
(String -> m (Maybe String)) -> [Token] -> m String
( ... )
m
如
toString
的类型(因为它引用了包含函数的
getenv
),但我不知道如何为
toString
编写显式类型尊重这一点 - 我认为没有任何方法可以引用不同类型声明中的任何内容,甚至可以做到吗?
最佳答案
我认为您正在寻找 ScopedTypeVariables
.我从来没有用过它,但它看起来是正确的。
关于haskell - 我怎样才能给这个子函数一个显式类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12530913/
我是一名优秀的程序员,十分优秀!