全局主题切换:Preact+Redux在PureScript中的应用
随着前端技术的发展,用户体验越来越受到重视。其中,主题切换功能可以让用户根据个人喜好或环境光线调整应用界面,提升用户体验。本文将围绕PureScript语言,结合Preact和Redux,实现一个全局主题切换功能。
1. 环境搭建
我们需要搭建一个基于PureScript、Preact和Redux的项目环境。以下是搭建步骤:
1. 安装Node.js和npm(Node Package Manager)。
2. 创建一个新的目录,并初始化npm项目:
bash
mkdir theme-switch
cd theme-switch
npm init -y
3. 安装Preact、Redux和相关的PureScript库:
bash
npm install preact preact-redux redux react-redux
4. 创建一个名为`src`的目录,用于存放源代码。
2. 创建主题配置
在`src`目录下,创建一个名为`themes.purs`的文件,用于定义亮色和暗色主题的样式:
purs
module Themes where
import Color (Color, hexToColor, rgbToColor)
import Color as Color
-- 亮色主题
lightTheme :: Color
lightTheme = rgbToColor 255 255 255
-- 暗色主题
darkTheme :: Color
darkTheme = rgbToColor 0 0 0
3. 创建Redux store
在`src`目录下,创建一个名为`store.purs`的文件,用于创建Redux store:
```purs
module Store where
import Redux (Action, ActionHandler, createStore, Reducer, Reducer_, State, State_, Store, Store_, applyMiddleware, createStore_, middleware, reducer, reducer_, store)
import Redux as Redux
import Redux.Saga as Saga
import Redux.Saga as Saga_
import Redux.Saga.Effect as Effect
import Redux.Saga.Effect_ as Effect_
import Redux.Saga.Saga as Saga_
import Redux.Saga.Saga_ as Saga_
import Redux.Saga.Task as Task
import Redux.Saga.Task_ as Task_
import Redux.Saga.TaskEffect as TaskEffect
import Redux.Saga.TaskEffect_ as TaskEffect_
import Redux.Saga.TaskPure as TaskPure
import Redux.Saga.TaskPure_ as TaskPure_
import Redux.Saga.TaskPureEffect as TaskPureEffect
import Redux.Saga.TaskPureEffect_ as TaskPureEffect_
import Redux.Saga.TaskPureTask as TaskPureTask
import Redux.Saga.TaskPureTask_ as TaskPureTask_
import Redux.Saga.TaskTask as TaskTask
import Redux.Saga.TaskTask_ as TaskTask_
import Redux.Saga.TaskTaskEffect as TaskTaskEffect
import Redux.Saga.TaskTaskEffect_ as TaskTaskEffect_
import Redux.Saga.TaskTaskPure as TaskTaskPure
import Redux.Saga.TaskTaskPure_ as TaskTaskPure_
import Redux.Saga.TaskTaskTask as TaskTaskTask
import Redux.Saga.TaskTaskTask_ as TaskTaskTask_
import Redux.Saga.TaskTaskTaskEffect as TaskTaskTaskEffect
import Redux.Saga.TaskTaskTaskEffect_ as TaskTaskTaskEffect_
import Redux.Saga.TaskTaskTaskPure as TaskTaskTaskPure
import Redux.Saga.TaskTaskTaskPure_ as TaskTaskTaskPure_
import Redux.Saga.TaskTaskTaskTask as TaskTaskTaskTask
import Redux.Saga.TaskTaskTaskTask_ as TaskTaskTaskTask_
import Redux.Saga.TaskTaskTaskTaskEffect as TaskTaskTaskTaskEffect
import Redux.Saga.TaskTaskTaskTaskEffect_ as TaskTaskTaskTaskEffect_
import Redux.Saga.TaskTaskTaskTaskPure as TaskTaskTaskTaskPure
import Redux.Saga.TaskTaskTaskTaskPure_ as TaskTaskTaskTaskPure_
import Redux.Saga.TaskTaskTaskTaskTask as TaskTaskTaskTaskTask
import Redux.Saga.TaskTaskTaskTaskTask_ as TaskTaskTaskTaskTask_
import Redux.Saga.TaskTaskTaskTaskTaskEffect as TaskTaskTaskTaskTaskEffect
import Redux.Saga.TaskTaskTaskTaskTaskEffect_ as TaskTaskTaskTaskTaskEffect_
import Redux.Saga.TaskTaskTaskTaskTaskPure as TaskTaskTaskTaskTaskPure
import Redux.Saga.TaskTaskTaskTaskTaskPure_ as TaskTaskTaskTaskTaskPure_
import Redux.Saga.TaskTaskTaskTaskTaskTask as TaskTaskTaskTaskTaskTask
import Redux.Saga.TaskTaskTaskTaskTaskTask_ as TaskTaskTaskTaskTaskTask_
import Redux.Saga.TaskTaskTaskTaskTaskTaskEffect as TaskTaskTaskTaskTaskTaskEffect
import Redux.Saga.TaskTaskTaskTaskTaskTaskEffect_ as TaskTaskTaskTaskTaskTaskEffect_
import Redux.Saga.TaskTaskTaskTaskTaskTaskPure as TaskTaskTaskTaskTaskTaskPure
import Redux.Saga.TaskTaskTaskTaskTaskTaskPure_ as TaskTaskTaskTaskTaskTaskPure_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTask as TaskTaskTaskTaskTaskTaskTask
import Redux.Saga.TaskTaskTaskTaskTaskTaskTask_ as TaskTaskTaskTaskTaskTaskTask_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskEffect as TaskTaskTaskTaskTaskTaskTaskEffect
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskEffect_ as TaskTaskTaskTaskTaskTaskTaskEffect_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskPure as TaskTaskTaskTaskTaskTaskTaskPure
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskPure_ as TaskTaskTaskTaskTaskTaskTaskPure_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTask as TaskTaskTaskTaskTaskTaskTaskTask
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTask_ as TaskTaskTaskTaskTaskTaskTaskTask_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskEffect as TaskTaskTaskTaskTaskTaskTaskTaskEffect
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskEffect_ as TaskTaskTaskTaskTaskTaskTaskTaskEffect_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskPure as TaskTaskTaskTaskTaskTaskTaskTaskPure
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskPure_ as TaskTaskTaskTaskTaskTaskTaskTaskPure_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTask as TaskTaskTaskTaskTaskTaskTaskTaskTask
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTask_ as TaskTaskTaskTaskTaskTaskTaskTaskTask_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskEffect as TaskTaskTaskTaskTaskTaskTaskTaskTaskEffect
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskPure as TaskTaskTaskTaskTaskTaskTaskTaskTaskPure
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskPure_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskPure_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTask as TaskTaskTaskTaskTaskTaskTaskTaskTaskTask
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTask_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTask_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskPure_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_ as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTask_
import Redux.Saga.TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect as TaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskTaskEffect
import Redux.Saga.Task
Comments NOTHING