【发布时间】:2019-06-19 02:56:10
【问题描述】:
我有两个功能:
prompt :: Text -> (Text -> Either Text a) -> IO a
subPrompt :: Text -> (Text -> Bool) -> IO a -> IO (Maybe (Text, a))
subPrompt 接受第二个提示(参数 3),如果参数 2 中的函数在运行第一个提示后返回为真,则显示它。
我不喜欢参数 3 是 IO a 我希望它更像:
subPrompt :: Text -> (Text -> Bool) -> prompt -> IO (Maybe (Text, a))
但我知道我做不到。我一直在想办法让签名更清楚第三个参数是什么。有什么方法可以定义更清晰的类型吗?或者我想太多了,IO a 实际上很好 - 我对 haskell 还是很陌生。
【问题讨论】:
-
您希望能够通过哪些非
IOy 的示例?subPrompt应该如何处理它们? -
哦,不,总是 IO。我想我是在问是否有办法让它成为一种特定类型的 IO。
-
好吧,我想我明白了:你想确保
subPrompt的第三个参数实际上是对prompt的调用(而不是,比如说deleteDirectory "/"),对吗?我已经写了一个关于一种方法的答案,但在写它时我思考:你是否也希望允许将subPrompt的结果作为第三个参数传递给subPrompt? (在我的回答中,我假设“是”,但当然也可以适应“否”的情况。) -
你想的没错 :) 我希望能够有任意数量的 subPrompts