Clojure

Other Clojure solutions.
(ns anagram
  (:require [clojure.string :refer [lower-case]]))

(defn is-anagram? [word1 word2]
  (let [w1 (lower-case word1)
        w2 (lower-case word2)
        different-words? (not= w1 w2)
        anagrams? (= (sort w1) (sort w2))]
    (and
     different-words?
     anagrams?)))

(defn anagrams-for [word prospect-list]
  (filter #(is-anagram? word %) prospect-list))

Roc

Other Roc solutions.
module [findAnagrams]

import unicode.Grapheme

findAnagrams : Str, List Str -> List Str
findAnagrams = \subject, candidates ->
    List.walk
        candidates
        []
        \acc, candidate ->
            if isAnagram subject candidate then
                List.append acc candidate
            else
                acc

isAnagram = \word, candidate ->
    wordLower = toLowerCase word
    candidateLower = toLowerCase candidate
    if wordLower == candidateLower then
        Bool.false
    else
        charOccurrences wordLower == charOccurrences candidateLower

charOccurrences = \word ->
    graphemes = Grapheme.split word |> Result.withDefault []
    List.walk
        graphemes
        (Dict.empty {})
        (\acc, grapheme ->
            value = Dict.get acc grapheme |> Result.withDefault 0
            Dict.insert acc grapheme (value + 1)
        )

toLowerCase = \word ->
    word
    |> Str.toUtf8
    |> List.map toLower
    |> Str.fromUtf8
    |> Result.withDefault ""

toLower = \byte ->
    if byte >= 'A' && byte <= 'Z' then byte + 32 else byte