将动态字符串解析为 HostPreference
Parse dynamic String into HostPreference
使用 Warp library,setHost
函数将不接受动态 String
作为主机值,但它会非常满意字符串文字:
> import Network.Wai.Handler.Warp
> apiHost = "0.0.0.0" :: String
> getHost $ setHost (read apiHost) defaultSettings
*** Exception: Prelude.read: no parse
> getHost $ setHost apiHost defaultSettings
<interactive>:16:19: error:
• Couldn't match type ‘[Char]’ with ‘HostPreference’
Expected type: HostPreference
Actual type: String
> getHost $ setHost "0.0.0.0" defaultSettings
Host "0.0.0.0"
当值是字符串文字时一切正常,但当它是动态生成的字符串时我找不到任何方法让它工作。这正是我所需要的,因为主机值来自环境变量。
结果...像往常一样,Hoogle is our friend。
String -> HostPreference
-- first result:
-- Host :: String -> HostPreference
-- streaming-commons Data.Streaming.Network.Internal
从那里开始
> import Data.Streaming.Network.Internal (HostPreference (Host))
> apiHost = "0.0.0.0" :: String
> getHost $ setHost (Host apiHost) defaultSettings
Host "0.0.0.0"
我看到您找到了专门针对此库的答案,但还有一个更通用的解决方案。您能够使用字符串文字,因为 HostPreference 是 IsString class 的一个实例(并且您打开了 OverloadedStrings 扩展)。这意味着您可以使用 class 的 fromString
方法,因此 fromString (read apiHost)
应该可以工作。
使用 Warp library,setHost
函数将不接受动态 String
作为主机值,但它会非常满意字符串文字:
> import Network.Wai.Handler.Warp
> apiHost = "0.0.0.0" :: String
> getHost $ setHost (read apiHost) defaultSettings
*** Exception: Prelude.read: no parse
> getHost $ setHost apiHost defaultSettings
<interactive>:16:19: error:
• Couldn't match type ‘[Char]’ with ‘HostPreference’
Expected type: HostPreference
Actual type: String
> getHost $ setHost "0.0.0.0" defaultSettings
Host "0.0.0.0"
当值是字符串文字时一切正常,但当它是动态生成的字符串时我找不到任何方法让它工作。这正是我所需要的,因为主机值来自环境变量。
结果...像往常一样,Hoogle is our friend。
String -> HostPreference
-- first result:
-- Host :: String -> HostPreference
-- streaming-commons Data.Streaming.Network.Internal
从那里开始
> import Data.Streaming.Network.Internal (HostPreference (Host))
> apiHost = "0.0.0.0" :: String
> getHost $ setHost (Host apiHost) defaultSettings
Host "0.0.0.0"
我看到您找到了专门针对此库的答案,但还有一个更通用的解决方案。您能够使用字符串文字,因为 HostPreference 是 IsString class 的一个实例(并且您打开了 OverloadedStrings 扩展)。这意味着您可以使用 class 的 fromString
方法,因此 fromString (read apiHost)
应该可以工作。