-
--- | Reverse the labels of this host in preparation for making a
--- lookup (using the DNS library). We need to reverse the labels
--- (the stuff between the dots) whether we're looking up a host or a
--- name. The only tricky part here is that we need to turn an
--- absolute 'Host' into a relative one.
---
--- ==== _Examples_
---
--- >>> import Text.Parsec ( parse )
---
--- >>> let (Right r) = parse host "" "1.2.3.4"
--- >>> reverse_labels r
--- "4.3.2.1"
---
--- >>> let (Right r) = parse host "" "www.example.com"
--- >>> reverse_labels r
--- "com.example.www"
---
--- Make sure absolute names are made relative:
---
--- >>> let (Right r) = parse host "" "www.example.com."
--- >>> reverse_labels r
--- "com.example.www"
---
-reverse_labels :: Host -> DNS.Domain
-reverse_labels h = reversed
- where
- -- | It's possible that we are given an absolute domain name to
- -- look up. This is legit; say I want to look up
- -- \"www.example.com.\" That's fine, but before we make the
- -- actual query we'll need to make it relative and then append
- -- the DNSBL's suffix to it.
- relative_host_string :: String
- relative_host_string =
- case h of
- (HostRelative _) -> pretty_show h
- (HostAbsolute d) -> pretty_show d
-
- dot = pack "."
- labels = split '.' (pack relative_host_string)
- reversed = intercalate dot (reverse labels)
+instance Reversible Host where
+ -- | Reverse the labels of this 'Host' in preparation for making a
+ -- lookup (using the DNS library). We need to reverse the labels
+ -- (the stuff between the dots) whether we're looking up a host or a
+ -- name.
+ --
+ -- ==== _Examples_
+ --
+ -- >>> import Text.Parsec ( parse )
+ --
+ -- >>> let (Right r) = parse host "" "1.2.3.4"
+ -- >>> pretty_print $ backwards r
+ -- 4.3.2.1
+ --
+ -- >>> let (Right r) = parse host "" "new.www.example.com"
+ -- >>> pretty_print $ backwards r
+ -- com.example.www.new
+ --
+ backwards (HostRelative d) = HostRelative $ backwards d
+ backwards (HostAbsolute d) = HostAbsolute $ backwards d