如何使用((。)。(。))中缀?

时间:2016-02-19 07:42:03

标签: haskell operators

众所周知:

$ curl -sSL https://rvm.io/mpapis.asc | sudo gpg --import -

gpg: WARNING: unsafe ownership on configuration file `/home/nethra/.gnupg/gpg.conf'
gpg: key D39DC0E3: "Michal Papis (RVM signing) <mpapis@gmail.com>" not changed
gpg: Total number processed: 1
gpg:              unchanged: 1

我可以像这样使用这个复合运算符前缀样式:

((.).(.)) :: (b -> c) -> (a -> a1 -> b) -> a -> a1 -> c

但似乎我不能像这样使用它中缀:

((.).(.)) f g

有没有办法在不定义另一个操作符或在包中使用预定义的操作符的情况下使用此中缀样式?

2 个答案:

答案 0 :(得分:4)

不,你不能。

haskell中只存在两种中缀运算符:

  1. 一个令牌,它是一个或多个运算符符号。对于所有运算符符号,请阅读What characters are permitted for haskell operators?
  2. 两个反引号之间的单个标识符。标识符是满足特定条件的标记:请阅读https://www.haskell.org/onlinereport/haskell2010/haskellch2.html#x7-180002.4
  3. 因此<$>是合法的中缀运算符,而`f``f x`,而不是lex "YOUR_TOKEN"。要测试某些内容是否是单个令牌,请尝试-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { MainViewController *main=[[MainViewController alloc]init]; [main playSong:notification.soundName]; } -(void)playSong:(NSString *)songName { AVAudioSession *session = [AVAudioSession sharedInstance]; [session setCategory:AVAudioSessionCategoryPlayback error:nil]; NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:songName ofType:@"mp3"]; NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath]; [_audioPlayer setDelegate:self]; _audioPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL: soundFileURL fileTypeHint:AVFileTypeMPEGLayer3 error:&errorAudio]; _audioPlayer.numberOfLoops = -1; //Infinite [_audioPlayer prepareToPlay]; [_audioPlayer play]; } 。这是一个很好的测试,有三个例外(参考the documentation of Prelude):

    • 合格的名称处理不当
    • 八进制和十六进制数字不被识别为单个标记
    • 评论未得到妥善处理

答案 1 :(得分:3)

不,你不能。中缀运算符只能是

  • 实际命名的中缀。确实,定义

    是很常见的
    (.:) :: (c->d) -> (a->b->c) -> a->b->d
    (.:) = (.).(.)
    

    本地。

  • 反引号中的命名函数。