anchor.diff:          |> Array.filter ( fun s -> s <> "" )
           |> Array.last
           |> fun ( s:string) ->
  -            if    s.Contains("<")
  -            then  angleBracket s |> nameSpaceArrayImpl
  -            elif  s.Contains(".")
  -            then  nameSpaceArrayImpl s
  -            else  [|s|]
  +            if s.Contains("<") then
  +                angleBracket s |> nameSpaceArrayImpl
  +            elif s.Contains(".") then
  +                nameSpaceArrayImpl s
  +            else
  +                [|s|]
           |> Array.map( fun s -> s.Replace("(","").Replace(")","") )
   
       let previousDot (s:string) =
  
positive.code:         postData.Line.Split(' ')
          |> Array.filter ( fun s -> s <> "" )
          |> fun ary ->
                 if       Array.contains "[<" ary  && not ( Array.contains ">]" ary )
                 then     attributeHints dic
                 else
                          oneWordHints   dic  ( Array.last ary )
  
  
      let autocomplete (s:string) (agent:LanguageAgent) ( dic :ConcurrentDictionary<string,string> )  : string =
          
          /// postData.Col is cursor position. not . position! ( eg. "abc". ---> postData.Col:7 . position: 6 )
          let postData = JsonConvert.DeserializeObject<PostData>(s)
  
          let main () =
  
              /// update condition of open keyword
              if      ( openCount( postData.Line ) < 1 ) && ( int(dic.Item("openCount")) <> openCount( postData.Source ) )
              then 
  
                      dic.TryUpdate( "openCount"  , string( openCount( postData.Source ))          , dic.Item("openCount")  )  |> ignore 
                      dic.TryUpdate( "Observable" , jsonStrings agent postData [|"Observable"|] "" , dic.Item("Observable")  ) |> ignore 
                      dic.TryUpdate( "OneWordHint", jsonStrings agent postData [||] ""             , dic.Item("OneWordHint") ) |> ignore
              
              let s = postData.Line.Replace("("," ").Split(' ')
                      |> Array.filter ( fun s -> s <> "" )
                      |> Array.last
  
              if         s.StartsWith(".")                       /// . .. ... ....
                      || (Regex.Match(s,"^.*\.\.+?$")).Success   /// List.. List... List....
              then
                      msgForDeoplete "" 
              else
                      if      s.Contains(".")
                      then
                              if      s.EndsWith(".")
                              then    dotHints agent dic postData
                              else
                                      postData.Line <- previousDot( s )
                                      dotHints agent dic postData
                      else    
                              oneWordOrAttributeHints dic postData
  
          if      postData.Init = "dummy_init"
          then    initfirst agent dic postData
                  msgForDeoplete "finish dummy initialize!"
          elif    postData.Init = "real_init"
          then    initSecond agent dic postData |> Async.Start
                  msgForDeoplete "finish real initialize!"
          else   
                  main () 
  
  
  module InteractiveConsole =
  
negative.code:         |> fun str -> str.Split('\n')
          |> Array.filter ( fun str -> str.ToLower().Contains( keyword ) )
          |> fun ary -> 
              if Array.isEmpty ary then
                  ""
              else
                  ary |> Array.reduce ( fun a b -> a + "\n" + b )
                  |> fun s -> s.TrimEnd()
  
  
      let attributeHints (dic:ConcurrentDictionary<string,string>) : string =
  