当前位置:  开发笔记 > 程序员 > 正文

Haskell - 接受不同的类型并采取相应的行动

如何解决《Haskell-接受不同的类型并采取相应的行动》经验,为你挑选了2个好方法。

让我们说我得到了以下非常基本的例子:

f :: Either Int String -> IO ()

以及函数g :: Int -> IO ()和函数g' :: String -> IO ()我基本上想要实现f作为"选择器"调用gg'取决于它的输入,以便将来我只需要工作f因为我知道我的程序只会遇到Int或串.

这种使用方式Either有意义吗?该约定似乎主要用于错误和异常处理.

如果它确实有意义,那么实施这样一个例子的好方法或最佳实践是什么?我听过/读过关于casebifunctors的信息.

如果没有:haskell处理不同输入类型可能性的方法是什么?或者这是从一开始就应该避免的事情?



1> Johannes Wei..:

所以这绝对是有意义的,并且实现的一种方法是:

f :: Either Int String -> IO ()
f e =
    case e of
        Left l -> g l
        Right r -> g' r

或使用either:

import Data.Either (either)
f :: Either Int String -> IO ()
f = either g g'

请注意,在第二个版本中,我没有为Either Int String参数指定变量名称.这称为eta转换/ eta减少.但显然你也可以写f e = either g g' e.



2> Daniel Pratt..:

作为扶手椅Haskell程序员,对我来说似乎很好.

f :: Either Int String -> IO ()
f (Left n) = g n
f (Right s) = g' s

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有