2013-01-06 9 views
9

を終了しなくなり、この小さなhaskell code snippetは、コンパイル時に終了しないためにGHCが発生します。小さなコードスニペットは、GHCが

{-# LANGUAGE BangPatterns #-} 
{-# OPTIONS_GHC -O2 #-} 

import qualified Data.Vector.Unboxed.Mutable as MV 
import Data.Vector.Unboxed ((!)) 
import qualified Data.Vector.Unboxed as V 
import Control.Monad (forM_) 

similar :: V.Vector Char -> Int 
similar v = l + sum (map (similar' 1 1) checks) 
    where 
    (l,checks) = let h = V.head v in V.foldl' 
     (\(i,is) c -> if c == h then (i+1,i:is) else (i+1,is)) (1,[]) (V.tail v) 
    similar' !r !n !i = if i < l-1 && v!(n) == v!(i+1) then similar' (r+1) (n+1) (i+1) 
     else r 

main :: IO() 
main = do 
    n <- getLine 
    v <- MV.replicate (read n) 0 
    forM_ [1..read n] $ \n' -> do 
     v' <- getLine 
     MV.unsafeWrite v (n'-1) (similar . V.fromList $ v') 
    V.unsafeFreeze v >>= V.mapM_ print 

私はGHC 7.4.1と7.6.1を試してみましたが、両方が終了しません。 Vectorの代わりにByteStringを使用したとき、コードは正常に機能しました。これはghcの問題かライブラリの問題ですか?または私のコードのどこかに問題がありますか?

+2

コンパイラがクラッシュした場合、コンパイラのエラーです。 –

答えて

5

これはGHCの問題のようです。

コンパイルは、vector-0.7.0.1を使用してvector-0.10.0.1とghc-7.0.4を使用し、ghc-7.0.1を使用し、vector-0.7.1、ghc- 7.2.2のベクター-0.9、ghc-7.4.1のベクター-0.9.1、ghc-7.4.2のベクター-0.9.1およびghc-7.6.1のベクター-0.9.1およびベクター-0.10.0.1。

vectorパッケージが非常にとなるSpecConstrパスにコンパイルがハングアップします。私はticketを開こうとしています。まあ、someone was faster

関連する問題