2016-08-19 4 views
2

Следующий код сбой при использовании GHC в Windows. Он отлично работает на Linux.Простое замещение замещения регулярного выражения в Windows с использованием regex-compat

Означает ли это какой-либо смысл или есть ошибка?

module Main where 

import qualified Text.Regex as Re -- from regex-compat 
import Debug.Trace 

main :: IO() 
main = do 
    putStr $ cleanWord "jan" 
    putStr $ cleanWord "dec" 
    putStr $ cleanWord "jun" -- crashes here 

cleanWord :: String -> String 
cleanWord word_ = 
    let word = trace (show word_) word_ in 
    let re = Re.mkRegexWithOpts "(jun|jul|aug|sep|oct|nov|dec)" True False in 
    Re.subRegex re word "" 

Некоторые дополнительные подробности

  1. Я строю с stack
  2. Он врезается в обоих GHCi и работает скомпилированный исполняемый
  3. Я попытался включить профилирование, но не могу понять как заставить это работать правильно.
+0

Кроме того, какое исключение? – Alec

+0

@Zeta обновлено, его регулярное выражение – Andre

+0

@ Ошибка программы Alec, ничего не выводится на консоль. – Zeta

ответ

0

Перемешивание регулярного выражения вокруг позволяет избежать ошибки в этом случае.

Это теперь работает отлично для меня

let re = Re.mkRegexWithOpts "(jul|aug|sep|oct|jun|nov|dec)" True False in 

Т.е. перемещение jun в конец регулярного выражения. Не особенно удовлетворительно, но это работает, и это означает, что я могу продолжать.

@ комментарий Зетов предполагает, что это ошибка с основной библиотекой

Это ошибка, вероятно, в регулярных выражениях POSIX, но из-за свою разницу в включении базовой библиотеки BSD регулярного выражения с 1994 года. В sslow будет доступ к недопустимому адресу памяти (-1 (% rdx) с rdx = 0) .

+0

Ошибка: https://sourceforge.net/p/lazy-regex/bugs/6/ – Andre

 Смежные вопросы

  • Нет связанных вопросов^_^