首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建infix函数

创建infix函数
EN

Stack Overflow用户
提问于 2013-09-04 03:57:42
回答 2查看 232关注 0票数 4

我可以定义这样的函数

代码语言:javascript
复制
method1 :: Int -> Int -> Int
method1 a b = a + b

main = print $ 1 `method1` 2

如果我不想每次调用函数时都使用,但是我想在infix表单中使用它,我该如何做呢?

代码语言:javascript
复制
method1 :: Int -> Int -> Int
method1 a b = a + b

main = print $ 1 method1 2
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-04 04:03:23

简单的回答是,你不能。想象一下,如果a b c有潜在的缺陷,那么b的歧义是可怕的。但是你可以定义一个操作符来帮你做这件事。其中任何一个都能工作

代码语言:javascript
复制
a |+| b   = method1
(|+|) a b = method1 a b 
(|+|)     = method1

然后

代码语言:javascript
复制
a |+| b === a `method1` b === method1 a b

haskell's infix操作符的允许字符是有限的,可选

代码语言:javascript
复制
:|!@#$%^&*-+./<>?\~

一个常见的库,透镜,有许多操作符作为同义词的较长的名称。这很常见。不过,请使用判断,否则最终您将得到比Haskell更多的perl :)

票数 9
EN

Stack Overflow用户

发布于 2013-09-04 10:53:50

对此,有一个卑鄙的、令人讨厌的“解决方案”--使用CPP宏。例:

代码语言:javascript
复制
{-# LANGUAGE CPP #-}

#define method1 `themethod`
module Main where

themethod x y = x + y

someValue = 3 method1 4

这是编译的,在ghci中,someValue将等于7。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18605158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档