readNGCObject :: String -> Maybe NGCObject
readNGCObject st = do
  h <- readMaybe (l !! 5)
  m <- readMaybe (l !! 7)
  s <- readMaybeFloatWithComma (l !! 9)
  let ra = fromHMS h m s
  mag <- readMaybeFloatWithComma (l !! 18)
  d <- readMaybe (l !! 11)
  m' <- readMaybe (l !! 13)
  s' <- readMaybeFloatWithComma (l !! 15)
  let dec = fromDMS d m' s'
  return  NGCObject
    { nID = head l
    , nPGC= l !! 1
    , nMessier= l !! 2
    , nType= l !! 3
    , nClass= l !! 4
    , nRA= ra
    , nDec= dec
    ,nMag= mag
    }
  where
     l = readRecord st
readNGCObject :: String -> Maybe NGCObject
readNGCObject st = do
  h <- readMaybe (l !! 5)
  m <- readMaybe (l !! 7)
  s <- readMaybeFloatWithComma (l !! 9)
  let ra = fromHMS h m s
  mag <- readMaybeFloatWithComma (l !! 18)
  d <- readMaybe (l !! 11)
  m' <- readMaybe (l !! 13)
  s' <- readMaybeFloatWithComma (l !! 15)
  let dec = fromDMS d m' s'
  return  NGCObject
    { nID = head l
    , nPGC= l !! 1
    , nMessier= l !! 2
    , nType= l !! 3
    , nClass= l !! 4
    , nRA= ra
    , nDec= dec
    ,nMag= mag
    }
  where
     l = readRecord st
readNGCObject st = do
  h <- readMaybe (l !! 5)
  m <- readMaybe (l !! 7)
  s <- readMaybeFloatWithComma (l !! 9)
  let ra = fromHMS h m s
  mag <- readMaybeFloatWithComma (l !! 18)
  d <- readMaybe (l !! 11)
  m' <- readMaybe (l !! 13)
  s' <- readMaybeFloatWithComma (l !! 15)
  let dec = fromDMS d m' s'
  return  NGCObject
    { nID = head l
    , nPGC= l !! 1
    , nMessier= l !! 2
    , nType= l !! 3
    , nClass= l !! 4
    , nRA= ra
    , nDec= dec
    ,nMag= mag
    }
  where
     l = readRecord st