@@ -410,33 +410,52 @@ imports."
410410  " The path which is considered as project root, this is determined by the
411411presence of a *.cabal file or stack.yaml file or something similar."  )
412412
413+ (defun  haskell-projectile-build-type  ()
414+   (if  (and  (fboundp  'projectile-project-root ) (bound-and-true-p  projectile-mode))
415+       (let*  ((d (projectile-project-root))
416+             (cabal (cl-find-if 
417+                     (lambda  (f ) (string-match-p  " .\\ .cabal\\ '"   f))
418+                     (directory-files  d))))
419+         (cond 
420+          ((and  (file-exists-p  (concat  d " cabal.project"  )) (executable-find  " cabal"  ))
421+           (cons  'cabal-project  d))
422+          ((and  (file-exists-p  (concat  d " cabal.sandbox"  )) (executable-find  " cabal"  ))
423+           (cons  'cabal-sandbox  d))
424+          ((and  (file-exists-p  (concat  d " stack.yaml"  )) (executable-find  " stack"  ))
425+           (cons  'stack  d))
426+          ((and  cabal (file-exists-p  (concat  d cabal)) (executable-find  " cabal"  ))
427+           (cons  'cabal  d))
428+          ((executable-find  " ghc"  ) (cons  'ghc  nil ))))
429+       nil ))
430+ 
413431(defun  haskell-build-type  ()
414432  " Looks for cabal and stack spec files.
415433   When found, returns a pair (TAG . DIR) 
416434   where TAG is \\= 'cabal-project, \\= 'cabal-sandbox. \\= 'cabal, or \\= 'stack; 
417435   and DIR is the directory containing cabal or stack file. 
418436   When none found, DIR is nil, and TAG is \\= 'ghc"  
419437  ; ; REVIEW maybe just 'cabal is enough.
420-   (let  ((cabal-project (locate-dominating-file  default-directory " cabal.project"  ))
421-         (cabal-sandbox (locate-dominating-file  default-directory " cabal.sandbox.config"  ))
422-         (stack         (locate-dominating-file  default-directory " stack.yaml"  ))
423-         (cabal         (locate-dominating-file 
424-                         default-directory
425-                         (lambda  (d )
426-                           (cl-find-if 
427-                            (lambda  (f ) (string-match-p  " .\\ .cabal\\ '"   f))
428-                            (directory-files  d))))))
429-     (cond 
430-      ((and  cabal-project (executable-find  " cabal"  ))
431-       (cons  'cabal-project  cabal-project))
432-      ((and  cabal-sandbox (executable-find  " cabal"  ))
433-       (cons  'cabal-sandbox  cabal-sandbox))
434-      ((and  stack (executable-find  " stack"  ))
435-       (cons  'stack  stack))
436-      ((and  cabal (executable-find  " cabal"  ))
437-       (cons  'cabal  cabal))
438-      ((executable-find  " ghc"  ) (cons  'ghc  nil ))
439-      (t  (error  " Could not find any installation of GHC. " )))))
438+   (or  (haskell-projectile-build-type)
439+     (let  ((cabal-project (locate-dominating-file  default-directory " cabal.project"  ))
440+           (cabal-sandbox (locate-dominating-file  default-directory " cabal.sandbox.config"  ))
441+           (stack         (locate-dominating-file  default-directory " stack.yaml"  ))
442+           (cabal         (locate-dominating-file 
443+                           default-directory
444+                           (lambda  (d )
445+                             (cl-find-if 
446+                              (lambda  (f ) (string-match-p  " .\\ .cabal\\ '"   f))
447+                              (directory-files  d))))))
448+       (cond 
449+        ((and  cabal-project (executable-find  " cabal"  ))
450+         (cons  'cabal-project  cabal-project))
451+        ((and  cabal-sandbox (executable-find  " cabal"  ))
452+         (cons  'cabal-sandbox  cabal-sandbox))
453+        ((and  stack (executable-find  " stack"  ))
454+         (cons  'stack  stack))
455+        ((and  cabal (executable-find  " cabal"  ))
456+         (cons  'cabal  cabal))
457+        ((executable-find  " ghc"  ) (cons  'ghc  nil ))
458+        (t  (error  " Could not find any installation of GHC. " ))))))
440459
441460(defun  haskell-process-type  ()
442461  " Return `haskell-process-type' , or a guess if that variable is \\= 'auto.
0 commit comments